Objective c 由于未捕获异常而终止应用程序';NSInvalidArgumentException';-无法识别的选择器
我正在尝试制作一个简单的notes应用程序。当我运行项目时,在调试区域,它显示Objective c 由于未捕获异常而终止应用程序';NSInvalidArgumentException';-无法识别的选择器,objective-c,unrecognized-selector,Objective C,Unrecognized Selector,我正在尝试制作一个简单的notes应用程序。当我运行项目时,在调试区域,它显示 [1752:19d03] -[TableViewController createEditableCopyOfDatabasteIfNeeded]: unrecognized selector sent to instance 0xa147d20 [1752:19d03] *** Terminating app due to uncaught exception 'NSInvalidArgumentExceptio
[1752:19d03] -[TableViewController createEditableCopyOfDatabasteIfNeeded]: unrecognized selector sent to instance 0xa147d20
[1752:19d03] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[TableViewController createEditableCopyOfDatabasteIfNeeded]: unrecognized selector sent to instance 0xa147d20'
而我的代码,包括CreateEditableCopyOfDataBasteIfNeed,是
- (void)createEditableCopyOfDatabaseIfNeeded {
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *documentDirectory = [self applicationDocumentsDirectory];
NSString *writableDBPath = [documentDirectory stringByAppendingPathComponent:@"NotesList.plist"];
BOOL dbexits = [fileManager fileExistsAtPath:writableDBPath];
if (!dbexits) {
NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"NotesList.plist"];
NSError *error;
BOOL success = [fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error];
if (!success) {
NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]);
}
}
}
问题出在哪里?
这可能很简单,但我对Xcode还不熟悉。
感谢您的帮助听起来您正在调用类
TableViewController
中未定义的方法createEditableCopyOfDatabaseIfNeeded
。您可以进入“断点”选项卡并添加新的断点(加号按钮),然后选择一个复选标记以保留所有异常或类似的内容。这将帮助您跟踪应用程序崩溃的位置
哪个类正在实现
createEditableCopyOfDatabaseIfNeeded
方法?听起来您在调用未在类TableViewController
中定义的方法createEditableCopyOfDatabaseIfNeeded
。您可以进入“断点”选项卡并添加新的断点(加号按钮),然后选择一个复选标记以保留所有异常或类似的内容。这将帮助您跟踪应用程序崩溃的位置
哪个类正在实现
createEditableCopyOfDatabaseIfNeeded
方法?在这种情况下,该错误确实提供了所需的所有信息。您已经定义了函数,但它不在TableViewController类中。您应该编辑代码,以便在它确实存在的类中调用它 该错误确实为您提供了本例中所需的所有信息。您已经定义了函数,但它不在TableViewController类中。您应该编辑代码,以便在它确实存在的类中调用它 既然将函数定义为-(void),那么应该通过TableViewController的实例调用它,而不是以“静态”方式[TableViewController CreateEditableCopyOfDatabaseTeifneed]
既然将函数定义为-(void)您应该通过TableViewController
的实例调用它,而不是以“静态”方式[TableViewController createEditableCopyOfDatabaseDefended]
我建议您也在Xcode中为所有异常添加断点
我建议您也在Xcode中为所有异常添加一个断点
1)按照@epatel在其图片中的建议,添加一个“所有异常”断点(希望如此),这将使您能够看到真正异常发生的地方(main只是您的应用程序中断的地方)2)通过整个TableViewController.m文件,以便我们可以看到它3)您是否在TableViewController.h标头中声明createEditableCopyOfDatabaseIfNeeded?1)只需按照@epatel在其图像中的建议执行,添加一个“所有异常”断点,(希望)这将使您能够看到真正异常发生的位置(main只是一个应用程序中断的地方)2)3)您是否在TableViewController.h标头中声明createEditableCopyOfDatabaseIfNeeded?问题的第一个是无法识别的选择器
这是因为您试图在UITableView上调用名为createEditableCopyOfDatabaseIfNeeded
的方法它不知道它是什么。如果需要,您在哪里调用CreateEditableCopyOfDatabaseIf
?第二,你不需要显示main.m
如果你没有捕获到异常,它将在这里结束退出,这被称为未捕获异常
,并将终止你的应用程序。按照Epatel
的回答执行异常本身的实际中断。首先,您的问题是无法识别的选择器
,这是因为您试图在UITableView
上调用名为createEditableCopyOfDatabaseIfNeeded
的方法,而它不知道它是什么。如果需要,您在哪里调用CreateEditableCopyOfDatabaseIf
?第二,你不需要显示main.m
如果你没有捕获到异常,它将在这里结束退出,这被称为未捕获异常
,并将终止你的应用程序。按照Epatel
回答中对异常本身的实际中断进行操作。