NSArray проблема с адресной книгой - PullRequest
0 голосов
/ 21 октября 2010

Я внедрил адресную книгу, я не знаю, что я делаю неправильно, но всякий раз, когда я выбираю адрес, все мое приложение вылетает, и я получаю ошибку

> 2010-10-21 11:57:13.922 ANWB[2989:207]
> *** Terminating app due to uncaught exception 'NSRangeException', reason:
> '*** -[NSCFArray objectAtIndex:]:
> index (0) beyond bounds (0)'
> 2010-10-21 11:57:13.935 ANWB[2989:207]
> Stack: (
>     843263261,
>     825818644,
>     842812211,
>     842812115,
>     862975761,
>     863130919,
>     110753,
>     870859136,
>     870898732,
>     870982260,
>     870977388,
>     844473760,
>     844851728,
>     862896011,
>     843011267,
>     843009055,
>     860901832,
>     843738160,
>     843731504,
>     9921,
>     9836 )

Мой код выглядит так:1004 *

ABPeoplePickerNavigationController *picker =
            [[ABPeoplePickerNavigationController alloc] init];
            picker.peoplePickerDelegate = self;

            [picker setDisplayedProperties:[NSArray arrayWithObject:[NSNumber numberWithInt:kABPersonAddressProperty]]];

            [self presentModalViewController:picker animated:YES];
            [picker release];

- (void)peoplePickerNavigationControllerDidCancel:
(ABPeoplePickerNavigationController *)peoplePicker {
    [self dismissModalViewControllerAnimated:YES];
}

- (BOOL)peoplePickerNavigationController:
(ABPeoplePickerNavigationController *)peoplePicker
      shouldContinueAfterSelectingPerson:(ABRecordRef)person {
    return YES;
}

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker
      shouldContinueAfterSelectingPerson:(ABRecordRef)person
                                property:(ABPropertyID)property
                              identifier:(ABMultiValueIdentifier)identifier {
    // Only inspect the value if it's an address.
    if (property == kABPersonAddressProperty) {
        ABMutableMultiValueRef multiValue = ABRecordCopyValue(person, property);
        for(CFIndex i=0;i<ABMultiValueGetCount(multiValue);i++)
        {
            CFDictionaryRef dict = ABMultiValueCopyValueAtIndex(multiValue, i)

;

.....

Я не знаю, почему это говорит мне, что массив создал эту ошибку

, пожалуйста, помогите мне

Редактировать: Ребята, спасибо за ответы, но, видимо, проблема не была даже в этом коде, это была проблема, откуда-то еще, очень ценю помощь, хотя

Ответы [ 2 ]

1 голос
/ 21 октября 2010

В журнале сообщается, что именно пошло не так:

*** Terminating app due to uncaught exception 'NSRangeException', reason:
'*** -[NSCFArray objectAtIndex:]:
index (0) beyond bounds (0)'

Это говорит о том, что ваш код пытается получить доступ к первому элементу (индекс 0) пустого массива (границы 0). Перед запуском цикла for убедитесь, что вы используете ABMultiValueGetCount, чтобы проверить, пуст ли массив, и вводите цикл только в том случае, если массив не пуст.

0 голосов
/ 21 октября 2010

Это на железе или на симуляторе?

Если вы запускаете с отладкой на симуляторе, то трассировка стека покажет вам, какие строки кода вызвали возможную проблему.

Хотя он может быть в библиотеке, он будет иметь происхождение с одной из ваших строк кода.

...