2014-01-30 174 views
0

我想存儲ABRecordRef對象,即使用Coredata格式爲<CPRecord: 0xa2a3500 ABPerson>如何在CoreData中存儲ABRecordRef對象

雖然我試圖像存儲

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"]; 

我得到一個崩潰說

記錄我都當作位整數數據類型。

終止應用程序由於未捕獲的異常NSInvalidArgumentException

原因:「的屬性不接受的類型的值:屬性= 「記錄」;期望的類型= NSNumber;給定類型= __NSCFType;值= 。

+0

嘗試使用'[NSNumber的numberWithInt:(INT)recordRef]'代替'(__bridge ID)(recordRef)' – Akhilrajtr

+0

@Akhilrajtr:我將能夠存儲,但是,我如何從NSNumber取回ABrecordRef對象 – iOSDev

回答

0

最好不要保存ABRecordRef,但是你應該在你的coredata中保存ABRecordRefID。這裏是link這可以給你更多的細節。我總是喜歡這樣做。

0

問題是您正在數據庫中存儲對象引用。參考指向的內存僅在時間點有效。如果存儲對象引用,然後從數據庫重新加載引用(特別是在重新啓動應用程序後),它將指向無效內存。

而是將來自對象的實際數據存儲到數據庫中,而不是從ABRecordGetRecordID()返回的對象引用或記錄標識。

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);