我想使用Coredata存储ABRecordRef
对象,格式为<CPRecord: 0xa2a3500 ABPerson>
。
虽然我试图存储像
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"];
我正在崩溃说
记录我已采用Integer32数据类型。
因未捕获的异常NSInvalidArgumentException
终止应用,
原因:'属性的值不可接受:property = “记录”;所需类型= NSNumber;给定type = __NSCFType;值=
答案 0 :(得分: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);
答案 1 :(得分:0)
最好不要保存ABRecordRef,但是你应该在你的coredata中保存ABRecordRefID。这是link,它可以为您提供更多详细信息。我总是喜欢这样做。
答案 2 :(得分:0)
问题是您在数据库中存储对象引用。引用指向仅在该时间点处有效的内存。如果存储对象引用,然后再从数据库重新加载引用(特别是在应用程序重新启动后),它将指向无效的内存。
而是将对象的实际数据存储到数据库中,而不是从ABRecordGetRecordID()
返回的对象引用或记录ID。