NSArray не принимает NSNumber - PullRequest
       3

NSArray не принимает NSNumber

1 голос
/ 20 февраля 2011

В моем приложении я хочу, чтобы пользователь выбрал контакт с подборщиком людей. Затем я хочу сохранить идентификатор записи в NSArray, поэтому мне нужно преобразовать его в NSNumber. Но при добавлении NSNumber в массив, это не так. Там нет ошибки, но когда я смотрю на объекты в отладчике, я вижу, что NSNumber personId имеет правильное значение, однако массив personAdd не содержит его.

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker 
      shouldContinueAfterSelectingPerson:(ABRecordRef)person {
    NSNumber *personId = [NSNumber numberWithInt:ABRecordGetRecordID(person)];
    NSString *first = (NSString *)ABRecordCopyValue(person,kABPersonFirstNameProperty);
    NSString *last = (NSString *)ABRecordCopyValue(person,kABPersonLastNameProperty);
    NSArray *personAdd = [NSArray arrayWithObjects:first, last, personId, nil];

    [self.myContactDataSource addPerson:personAdd]; //further usage of the data

    [self.tableView reloadData];                            //reload table view and
    [peoplePicker dismissModalViewControllerAnimated:YES];  //dismiss people picker
    return NO; //tell peoplepicker not to display the contact details
}

Может кто-нибудь сказать мне, как это исправить?

Ответы [ 3 ]

1 голос
/ 20 февраля 2011

ОК, если предположить, что first, last и personId не равны нулю.,.

Вы говорите, что в отладчике это выглядит неправильно - как вы имеете в виду?

Что произойдет, если вы сделаете это - вы можете скопировать консоль в свой вопрос:

// Debug the person id
NSLog(@"%i", [personId intValue]);

// Check that it's in the array OK
NSLog(@"%i", [personAdd objectAtIndex:2]);

// Add it to your stuff
[self.myContactDataSource addPerson:personAdd];

// Check that the array is still OK
NSLog(@"%i", [[myContactDataSource objectAtIndex:2] intValue]);

Я знаю, что это не совсем ответ, но это может пролить свет на проблему!

1 голос
/ 20 февраля 2011

Сам не видя этого в отладчике, единственное предложение, о котором я могу подумать, это попытаться поместить personId первым в массиве и проверить, равны ли значения first / last нулю.Кроме того, я, честно говоря, понятия не имею, почему NSArray отказывается от NSNUmber.

0 голосов
/ 20 февраля 2011

Что произойдет, если первым или последним будет ноль?

NSArray *personAdd = [NSArray arrayWithObjects:first, last, personId, nil];

Метод arrayWithObjects останавливается на первом nil, который видит - если first или last равен nil, он никогда не добавит personId: (

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...