2012-09-30 24 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

相关问题