/ / Як зберегти об'єкт ABRecordRef в CoreData - ios, iphone, core-data, nsmanagedobjectcontext

Як зберегти об'єкт ABRecordRef в CoreData - ios, iphone, core-data, nsmanagedobjectcontext

Я хочу зберегти a ABRecordRef Об'єкт, тобто у форматі <CPRecord: 0xa2a3500 ABPerson> використовуючи Coredata.

Поки я спробував зберегти як

NSEntityDescription *entityDescriptionStrings = [NSEntityDescription entityForName:@"ContactsStrings" inManagedObjectContext:context];

ContactsStrings *contactsManagedObjectStrings = [[ContactsStrings alloc] initWithEntity:entityDescriptionStrings insertIntoManagedObjectContext:context];

ABRecordRef recordRef = CFArrayGetValueAtIndex(contactInfoArray, i);
[contactsManagedObjectStrings setValue:(__bridge id)(recordRef) forKey:@"record"];

Я отримую аварію, кажучи

запис, який я прийняв як Datatype Integer32.

Припинення програми через невичерпаний виняток NSInvalidArgumentException,

Причина: "Неприйнятний тип значення для атрибута: property = "запис"; бажаний тип = NSNumber; даний тип = __NSCFType; значення = .

Відповіді:

1 для відповіді № 1

Спробуйте це,

ABRecordRef recordRef = CFArrayGetValueAtIndex(contactInfoArray, i);
ABRecordId recId = ABRecordGetRecordID(recordRef);
NSNumber *recordId = [NSNumber numberWithInt:(int)recId];
[contactsManagedObjectStrings setValue:recordId forKey:@"record"];

відтягнутися

//recordId is the value of record key from managedobject
ABRecordId recId = (ABRecordId)[recordId intValue];
ABRecordRef recordRef = ABAddressBookGetPersonWithRecordID(ddressBook, recId);

0 для відповіді № 2

Вам краще не вдарити ABRecordRef, але ви повинні зберегти ABRecordRefID у своїх корекційних каталогах. посилання який може дати вам більш детальну інформацію про це. Я завжди волію робити таким чином.


0 для відповіді № 3

Справа в тому, що ви зберігаєте посилання на об'єкт в базі даних. Посилання вказує на пам'ять, дійсну на тільки цей момент часу. Якщо ви зберігаєте посилання на об'єкт, а потім знову завантажуєте посилання з бази даних (особливо після перезавантаження додатка), це означатиме недійсну пам'ять.

Замість того, щоб зберігати фактичні дані з об'єкта в базу даних, а не посилання на об'єкт, або, можливо, ідентифікатор запису, як повернуто з ABRecordGetRecordID().