Использование GameKit для передачи данных CoreData между iPhone через NSDictionary - PullRequest
0 голосов
/ 17 июня 2010

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

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

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

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

Любая помощь или образец кода по этому вопросу будет принята с благодарностью.

Ответы [ 2 ]

1 голос
/ 17 июня 2010

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

JSON и базовые данные на iPhone

1 голос
/ 17 июня 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"];

.. и все готово.

...