内存崩溃与ABNewPersonViewController使用ARC
问题描述:
我遇到问题,当我使用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
答
我已经解决了,在手机的问题ABMutableMultiValueRef正确答案是以下:
前面的回答:
ABMutableMultiValueRef phoneNumberMultiValue = ABMultiValueCreateMutable(kABPersonPhoneProperty);
正确答案:
ABMutableMultiValueRef phoneNumberMultiValue = ABMultiValueCreateMutable(kABMultiStringPropertyType);
没有ü把断点并找到错误发生? – 2013-02-11 08:47:23
是的,我这样做这个词典(dictionaryDetail)是从ARC发布的问题可能是我打开地址簿视图控制器并解雇它 – wod 2013-02-11 08:50:05
它给我的数据第一视图,但之后崩溃 – wod 2013-02-11 08:50:39