#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 и неправильно подключили свои розетки.