2013-02-11 85 views
1

我遇到問題,當我使用AddressBook框架(核心基金會),使內存崩潰的NSMutableDictionary變量使用設置電話號碼和地址簿中的其他字段,如下面的電子郵件。這種情況發生時,我第一次當我調用這個方法傳遞數據到ABNewPerson之後,當取消或保存聯繫人,並回到我的視圖控制器,並點擊另一次調用此方法給我錯誤的電話號碼數據NSMutabledictionary可能代碼低於:內存崩潰與ABNewPersonViewController使用ARC

ABNewPersonViewController *newPersonViewController =[[ABNewPersonViewController alloc]init]; 
newPersonViewController.newPersonViewDelegate = self; 
UINavigationController *newNavigationController = [[UINavigationController alloc] 

                 initWithRootViewController:newPersonViewController]; 
newPersonViewController.displayedPerson =(ABRecordRef)[self buildContactDetails]; 
[self presentModalViewController:newNavigationController animated:YES]; 


- (ABRecordRef)buildContactDetails { 
     ABRecordRef person = ABPersonCreate(); 
     CFErrorRef error = NULL; 

    // firstname 
    ABRecordSetValue(person, kABPersonFirstNameProperty, (__bridge_retained CFTypeRef)(self.name.text), NULL); 

    // lastname 
    NSString *regionName = self.region.text; 
    ABRecordSetValue(person, kABPersonLastNameProperty, (__bridge_retained CFTypeRef)(regionName), NULL); 


    //Phone 

    ABMutableMultiValueRef phoneNumberMultiValue = ABMultiValueCreateMutable(kABPersonPhoneProperty); 
    //Here is the problem this release dictionaryDetail after come back another time 
    NSString *phoneNumber = [[dictionaryDetail valueForKey:@"selectedRow"] valueForKey:@"phone" ]; 
    NSLog(@"NNNNN %@",phoneNumber); 

    ABMultiValueAddValueAndLabel(phoneNumberMultiValue,(__bridge CFTypeRef)(phoneNumber) , kABOtherLabel, NULL); 
    ABRecordCopyValue(person, kABPersonPhoneProperty); 
    ABRecordSetValue(person, kABPersonPhoneProperty, phoneNumberMultiValue, nil); 
    //CFRelease(phoneNumberMultiValue); 



    // Start of Address 
    ABMutableMultiValueRef address = ABMultiValueCreateMutable(kABMultiDictionaryPropertyType); 
    NSMutableDictionary *addressDict = [[NSMutableDictionary alloc] init]; 
    NSString *subRegion = self.subRegion.text; 
    [addressDict setObject:@"" forKey:(NSString *)kABPersonAddressStreetKey]; 
    [addressDict setObject:@"" forKey:(NSString *)kABPersonAddressZIPKey]; 
    [addressDict setObject:subRegion forKey:(NSString *)kABPersonAddressCityKey]; 

    ABMultiValueAddValueAndLabel(address, (__bridge_retained CFTypeRef)(addressDict), (__bridge CFStringRef)(AMLocalizedString(@"Hospital", @"Hospital")), NULL); 
    ABRecordSetValue(person, kABPersonAddressProperty, address, &error); 
    //CFRelease(address); 
    // End of Address 
    if (error != NULL) 
     NSLog(@"Error: %@", error); 

    return person; 
} 

在這裏墜毀:

[CFString release]: message sent to deallocated instance 
+0

沒有ü把斷點並找到錯誤發生? – 2013-02-11 08:47:23

+0

是的,我這樣做這個詞典(dictionaryDetail)是從ARC發佈的問題可能是我打開地址簿視圖控制器並解僱它 – wod 2013-02-11 08:50:05

+0

它給我的數據第一視圖,但之後崩潰 – wod 2013-02-11 08:50:39

回答

2

我已經解決了,在手機的問題ABMutableMultiValueRef正確答案是以下:

前面的回答:

ABMutableMultiValueRef phoneNumberMultiValue = ABMultiValueCreateMutable(kABPersonPhoneProperty); 

正確答案:

ABMutableMultiValueRef phoneNumberMultiValue = ABMultiValueCreateMutable(kABMultiStringPropertyType);