Журнал сбоев iPhone

#iphone

#iPhone

Вопрос:

объясните ли вы следующий журнал сбоев……

 Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIViewController createAddressBookCopy]: unrecognized selector sent to instance 0x5908300'.
  

что это значит?
мой код здесь….

 -(NSString *)pathOfFile{
    NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
    NSString *documentsDirectory=[paths objectAtIndex:0];
    //lastName.text=[paths objectAtIndex:0];
    return [documentsDirectory stringByAppendingFormat:@"contacts.plist"];
}


-(IBAction)createAddressBookCopy{

UIActionSheet *actionSheet=[[UIActionSheet alloc]
                            initWithTitle:@"Wanna create a copy of Addressbook?"
                            delegate:self
                            cancelButtonTitle:@"Cancel"
                            destructiveButtonTitle:@"Yeah!!!"
                            otherButtonTitles:nil];
[actionSheet showInView:self.view];
[actionSheet release];



ABAddressBookRef addressBook = ABAddressBookCreate();

CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook);
CFIndex nPeople = ABAddressBookGetPersonCount(addressBook);

NSMutableArray *masterList = [[NSMutableArray alloc] init];
for (int i = 0; i < nPeople; i  ) {
    ABRecordRef ref = CFArrayGetValueAtIndex(allPeople, i);
    CFStringRef fName = ABRecordCopyValue(ref, kABPersonFirstNameProperty);
    CFStringRef lName = ABRecordCopyValue(ref, kABPersonLastNameProperty);
    NSString *contactFirstLast = [NSString stringWithFormat: @"%@", (NSString *)lName];

    CFRelease(fName);
    CFRelease(lName);
    [masterList addObject:contactFirstLast];
    //[contactFirstLast release];
}

//self.list = masterList;
[masterList writeToFile:[self pathOfFile] atomically:YES];

[masterList release]; 

}

//creating action sheet

-(void)actionSheet:(UIActionSheet *) actionSheet willDismissWithButtonIndex:(NSInteger)buttonIndex{
    if (buttonIndex!=[actionSheet cancelButtonIndex]) {
        UIAlertView *alert=[[UIAlertView alloc]
                            initWithTitle:@"Copy creaeted."
                            message:@"New copy is contacts.plist"
                            delegate:self
                            cancelButtonTitle:@"DONE" 
                            otherButtonTitles:nil
                            ];
        [alert show];
        [alert release];
    }
}
  

Комментарии:

1. Что-то не так с вашим методом createAddressBookCopy . Можете ли вы опубликовать свой код о том, как вы вызываете и определяете метод

Ответ №1:

Проверьте, правильно ли подключен ваш IBAction . Я думаю, что он неправильно подключен. Проверьте, совпадает ли объявление метода в файле .h.

Комментарии:

1. есть ли какая-либо разница в соединении между приложением на основе просмотра и на основе панели вкладок?

2. Как вы объявляете этот метод в файле .h вашего контроллера просмотра и как вы их подключаете?

3. -(NSString *)Путь к файлу; -(IBAction)createAddressBookCopy;

4. На самом деле я работаю с базовым приложением tabbar … я создаю копию на второй вкладке. итак, чтобы подключить действие, я открыл файл с наконечником для второй вкладки .. а затем добавить действие к кнопке этого файла с наконечником для владельца файла.

5. на второй вкладке есть другой контроллер просмотра, верно? И если этот метод настроен на первой вкладке, как к нему можно получить доступ на второй вкладке?

Ответ №2:

Вы отправили сообщение createAddressBookCopy на UIViewController объект. Произошел сбой приложения, потому что UIViewController в нем нет метода с таким названием.

Комментарии:

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

Ответ №3:

Это означает, что у вас есть некоторый код, который пытался вызвать createAddressBookCopy метод в UIViewController экземпляре. Согласно документации, такого метода не существует, отсюда и сбой.

Ответ №4:

Это означает, что какой-то объект в вашей программе пытается отправить createAddressBookCopy сообщение UIViewController , но этот UIViewController объект не реализует такой метод

Ответ №5:

В UIViewController нет метода с именем createAddressBookCopy. Я подозреваю, что у вас есть подкласс UIViewController, в котором есть этот метод, но по какой-то причине вы вызываете суперкласс. Это иногда случается, если вы используете Interface Builder и неправильно подключили свои розетки.