Использование GameKit для передачи данных CoreData между iPhone через NSDictionary

У меня есть приложение, в котором я хотел бы обмениваться информацией между двумя iPhone через Core Data.

Сначала превращаем объект Core Data в NSDictionary (что-то очень простое, которое превращается в NSData для передачи).

Мои CoreData имеет 3 строковых атрибута, 2 атрибута изображения, которые можно преобразовать.

Я просмотрел API NSDictionary, но мне не повезло с ним, создав или добавив к нему информацию CoreData.

Мы будем очень благодарны за любую помощь или образец кода по этому поводу.


person OscarTheGrouch    schedule 17.06.2010    source источник


Ответы (2)


Я бы порекомендовал вам преобразовать объекты Core Data в промежуточный формат, такой как JSON, прежде чем передавать их по сети. Я написал код о том, как преобразовать NSManagedObject экземпляры в JSON и из него, в этом другом посте:

JSON и основные данные на iPhone

person Marcus S. Zarra    schedule 17.06.2010

NSManagedObject не соответствует протоколу NSCoding, поэтому вы не можете преобразовать управляемый объект прямо в данные.

Вместо этого вам просто нужно добавить метод к подклассу управляемого объекта, который возвращает словарь с атрибутами экземпляра, а затем на стороне получателя использовать их для создания нового управляемого объекта в локальном контексте.

Редактировать:

Из комментариев:

В настоящее время я выступаю за отправляющую сторону ..

NSData* data;
NSString *str0 = [NSString stringWithFormat:@"%@",[[person valueForKey:@"PersonName"] description]];
NSString *str1 = [NSString stringWithFormat:@"%@",[[person valueForKey:@"alias"] description]];
NSMutableDictionary *taskPrototype = [NSMutableDictionary dictionary];
[taskPrototype setObject:str0 forKey:@"PersonName"];
[taskPrototype setObject:str1 forKey:@"alias"];
data = ?????;
//I do not know what to put here... [self mySendDataToPeers:data];

на принимающей стороне у меня ...

 NSMutableDictionary *trial = [[NSMutableDictionary alloc] initWithData:data];
 NSString *str0a = ???? NSString *str1a = ???? 
//I dont know what to put after this to retrieve the values and keys from the dictionary

Вы бы просто отменили процесс, чтобы создать управляемый объект на приемнике.

NSMutableDictionary *trial = [[NSMutableDictionary alloc] initWithData:data];
NSManagedObject *person=[NSEntityDescription insertNewObjectForEntityForName:@"PersonEntity" inManagedObjectContext:moc];
[person setValue:[trial objectForKey:@"PersonName"] forKey:@"PersonName"];
[person setValue:[trial objectForKey:@"alias"] forKey:@"alias"];

.. и вы сделали.

person TechZen    schedule 17.06.2010
comment
В настоящее время для отправляющей стороны у меня есть ... NSData * data; NSString * str0 = [NSString stringWithFormat: @% @, [[person valueForKey: @PersonName] описание]]; NSString * str1 = [NSString stringWithFormat: @% @, [[person valueForKey: @alias] описание]]; NSMutableDictionary * taskPrototype = [словарь NSMutableDictionary]; [taskPrototype setObject: str0 forKey: @PersonName]; [taskPrototype setObject: str1 forKey: @alias]; data = ?????; // Я не знаю, что сюда поместить ... [self mySendDataToPeers: data]; - person OscarTheGrouch; 18.06.2010
comment
на принимающей стороне у меня есть ... NSMutableDictionary * trial = [[NSMutableDictionary alloc] initWithData: data]; NSString * str0a = ???? NSString * str1a = ???? // Я не знаю, что поставить после этого, чтобы получить значения и ключи из словаря. - person OscarTheGrouch; 18.06.2010