2012-01-29 4 views
0

У меня есть mutableArray и в нем задан номер контакта.Номер контактного номера nil

Я использую следующий код:

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); 

И он возвращает цифры. И да, у меня есть reloadDate в viewWillappear.

+0

Если вы радикально отредактировали свой вопрос после получения ответов, ответы не имеют никакого смысла. Это делает вопрос и ответы ограниченным использованием для кого-либо еще. – Abizern

ответ

1

Вы освобождаете phoneNumbers прямо после копирования на него. Попробуйте переместить его после использования.

Или, еще лучше, передать право собственности на объект NSString через ARC

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; 
+0

Спасибо, я сделал это. Странно это все равно (null) в tableView. – Blade

+0

Спасибо за редактирование. Но теперь он ничего не вернет. Не (null), ни число. Проверяется с помощью NSLog и точек останова, и числа определенно находятся в массиве. – Blade

+0

Я не могу обойтись без остальной части кода. – Abizern

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); 
+0

Спасибо, но я пошел с решением Abizerns. Кажется, это то же самое. Но tableView по-прежнему возвращает (Null), а не номер. – Blade

Смежные вопросы