2012-09-30 26 views
1

我正在嘗試保存firstNamelastnameNSLog(firstName);從地址簿輸出正確的值,但_dossier.firstName爲空。 圖像保存正確。從CFStringRef保存NSString。 ARC

ABAddressBookRef addressBook = ABAddressBookCreate(); 

for (TKAddressBook *ab in contacts) { 
    NSNumber *personID = [NSNumber numberWithInt:ab.recordID]; 
    ABRecordID abRecordID = (ABRecordID)[personID intValue]; 
    ABRecordRef abPerson = ABAddressBookGetPersonWithRecordID(addressBook, abRecordID); 

    NSString* firstName = nil; 
    NSString* lastName = nil; 


    // Check person image 
    UIImage *personImage = nil; 
    if (abPerson != nil && ABPersonHasImageData(abPerson)) { 

     firstName = (__bridge NSString*)ABRecordCopyValue(abPerson, 
                  kABPersonFirstNameProperty); 
     NSLog(firstName); 
     lastName = (__bridge NSString*)ABRecordCopyValue(abPerson, 
                 kABPersonLastNameProperty); 

     CFDataRef contactThumbnailData = ABPersonCopyImageDataWithFormat(abPerson, kABPersonImageFormatThumbnail); 
     personImage = [UIImage imageWithData:(__bridge NSData*)contactThumbnailData]; 
     CFRelease(contactThumbnailData); 
     [_document.managedObjectContext performBlock:^() { 
      Dossier *dossier = [NSEntityDescription insertNewObjectForEntityForName:@"Dossier" 
                  inManagedObjectContext:_document.managedObjectContext]; 

      _dossier.firstName = firstName; 
      _dossier.lastName = lastName; 

      dossier.photo = personImage; 
     }]; 

    } 
} 
+1

什麼是_dossier?不應該是'dossier.firstName = firstName; dossier.lastName = lastName;'? –

+0

_dossier是UIManagedDocument – Shmidt

+1

我不認爲這會對問題有所幫助,但是您應該對來自'ABRecordCopyValue'的返回值使用'__bridge_transfer'(或'CFBridgingRelease')。 –

回答

2

裏面的performBlock已分配firstNamelastName_dossier,而不是新創建dossier對象。

0

在這一行:

firstName = (__bridge NSString*)ABRecordCopyValue(abPerson, 
     NSLog(firstName);                kABPersonFirstNameProperty); 

NSLog中斷的聲明。除非格式很糟糕。

+0

我改進了格式,但錯誤不在此 – Shmidt

相關問題