NSArray不接受NSNumber

时间:2011-02-20 16:04:35

标签: objective-c xcode ios nsarray

在我的应用程序中,我希望用户选择与peoplePicker的联系人。然后我想将记录ID存储在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 个答案:

答案 0 :(得分:1)

我自己没有在调试器中看到这一点,我能想到的唯一建议是尝试将personId放在数组中,然后检查第一个/最后一个是否为零。除此之外,老实说,我不知道为什么NSArray会拒绝NSNUmber。

答案 1 :(得分:1)

好的,假设第一个,最后一个和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]);

我知道这不是一个答案,但它可能会对这个问题有所了解!

答案 2 :(得分:0)

如果第一个或最后一个是零,会发生什么?

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

arrayWithObjects方法在它看到的第一个nil处停止 - 如果first或last为nil则它将永远不会添加personId :(