联系电话号码保持无效

时间:2012-01-29 13:58:56

标签: ios tableview addressbook null

我有一个mutableArray并将联系人的号码放入其中。

我使用以下代码:

ABMultiValueRef phoneNumbers = (ABMultiValueRef)ABRecordCopyValue(person, kABPersonPhoneProperty);
CFRelease(phoneNumbers);
number = (__bridge NSString*)ABMultiValueCopyValueAtIndex(phoneNumbers, 0);


[thenumbers addObject:number];

为了检索它,我这样做:

Contacts *num = [thenumbers objectAtIndex:indexPath.row];
NSString *numbers = [NSString stringWithFormat:@"%@", [num number]];
cell.detailTextLabel.text = numbers;

我设置断点并在正确的位置停止。我也试过

NSLog(@"%@", number);

它返回数字。是的,我在viewWillappear中有reloadDate。

2 个答案:

答案 0 :(得分:1)

在以下代码中,

ABMultiValueRef phoneNumbers = (ABMultiValueRef)ABRecordCopyValue(person, kABPersonPhoneProperty);
CFRelease(phoneNumbers);
number = (__bridge NSString*)ABMultiValueCopyValueAtIndex(phoneNumbers, 0);

您正在发布phoneNumbers,然后您正在访问该变量。将其更改为如下。

ABMultiValueRef phoneNumbers = (ABMultiValueRef)ABRecordCopyValue(person, kABPersonPhoneProperty);
number = (__bridge NSString*)ABMultiValueCopyValueAtIndex(phoneNumbers, 0);
CFRelease(phoneNumbers);

答案 1 :(得分:1)

复制到它后,你正在释放phoneNumbers。使用后尝试移动它。

或者,更好的是,通过ARC将所有权转移到NSString对象

ABMultiValueRef phoneNumbers = (ABMultiValueRef)ABRecordCopyValue(person, kABPersonPhoneProperty);
number = (__bridge_transfer NSString*)ABMultiValueCopyValueAtIndex(phoneNumbers, 0);

根本无需拨打CFRelease(phoneNumbers)

至于将数字输入单元格,你会对你的类型感到困惑。您将NSString放入theNumber但是您需要Contacts。然后发送一些number消息。

你已经在数组中放了一个字符串,你只能拔出一个字符串或一个子类。

NSString *numbers = [thenumbers objectAtIndex:indexPath.row];
cell.detailTextLabel.text = numbers;