我有一个带有多个视图的tabbar,一个带有连接到Core Data的tableview。现在我在另一个项目中再创建一个tableview,我想将它合并到我的第一个项目中。这对我来说并不陌生,我之前已经在另一个项目中完成了这个项目,其中我有三个不同核心数据表的表视图,一切正常。所以我觉得这将是在公园散步。
在我的AppDelage.m和.h中,我已将managedObjectContext的所有代码添加并复制到managedObjectContext2。并制作了新的导航控制器“navigationController2”。
ProtokollList *protokollList = (ProtokollList *)[navigationController2 topViewController];
// Set its managedObjectContext property to the managed object context
protokollList.managedObjectContext2 = self.managedObjectContext2;
// Get the root view controller; it's in the topViewController property of the navigation controller
KortKategori *kortKategori = (KortKategori *)[navigationController topViewController];
// Set its managedObjectContext property to the managed object context
kortKategori.managedObjectContext = self.managedObjectContext;
然后在我的ProtokollList.m中,我将managedObjectContext更改为managedObjectContext2。并在MainWindow.nib中建立了必要的连接。
但是当我尝试运行该项目时,我收到此错误消息:
2011-07-24 18:22:58.188 Kortspel[1346:207] Unknown class ProtokollList in Interface Builder file.
2011-07-24 18:22:58.198 Kortspel[1346:207] -[UIViewController setManagedObjectContext2:]: unrecognized selector sent to instance 0x4d13c40
2011-07-24 18:22:58.199 Kortspel[1346:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIViewController setManagedObjectContext2:]: unrecognized selector sent to instance 0x4d13c40'
*** Call stack at first throw:
(
0 CoreFoundation 0x00fab5a9 __exceptionPreprocess + 185
1 libobjc.A.dylib 0x010ff313 objc_exception_throw + 44
2 CoreFoundation 0x00fad0bb -[NSObject(NSObject) doesNotRecognizeSelector:] + 187
3 CoreFoundation 0x00f1c966 ___forwarding___ + 966
4 CoreFoundation 0x00f1c522 _CF_forwarding_prep_0 + 50
5 Kortspel 0x00001f28 -[KortAppDelegate applicationDidFinishLaunching:] + 709
6 UIKit 0x002c4ce2 -[UIApplication _callInitializationDelegatesForURL:payload:suspended:] + 1252
7 UIKit 0x002c6d88 -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 439
8 UIKit 0x002d1617 -[UIApplication handleEvent:withNewEvent:] + 1533
9 UIKit 0x002c9abf -[UIApplication sendEvent:] + 71
10 UIKit 0x002cef2e _UIApplicationHandleEvent + 7576
11 GraphicsServices 0x01903992 PurpleEventCallback + 1550
12 CoreFoundation 0x00f8c944 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52
13 CoreFoundation 0x00eeccf7 __CFRunLoopDoSource1 + 215
14 CoreFoundation 0x00ee9f83 __CFRunLoopRun + 979
15 CoreFoundation 0x00ee9840 CFRunLoopRunSpecific + 208
16 CoreFoundation 0x00ee9761 CFRunLoopRunInMode + 97
17 UIKit 0x002c67d2 -[UIApplication _run] + 623
18 UIKit 0x002d2c93 UIApplicationMain + 1160
19 Kortspel 0x00001c40 main + 102
20 Kortspel 0x00001bd1 start + 53
)
terminate called after throwing an instance of 'NSException'
我不知道它说它不识别“ProtokollList”类,因为它是在ProtokollList.h中定义的。
有没有人有任何想法?这是启动前的最后一步!
编辑: 如果我试图删空:
/*
ProtokollList *protokollList = (ProtokollList *)[navigationController2 topViewController];
// Set its managedObjectContext property to the managed object context
protokollList.managedObjectContext2 = self.managedObjectContext2;
*/
我可以打开项目,但是当我点击ProtokollList-tableview时,我收到这条新的错误信息:
2011-07-25 20:06:56.588 Kortspel[3205:207] Unknown class ProtokollList in Interface Builder file.
2011-07-25 20:07:01.585 Kortspel[3205:207] -[UIViewController tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0x590f3f0
2011-07-25 20:07:01.587 Kortspel[3205:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIViewController tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0x590f3f0'
*** Call stack at first throw:
(
0 CoreFoundation 0x00fb25a9 __exceptionPreprocess + 185
1 libobjc.A.dylib 0x01106313 objc_exception_throw + 44
2 CoreFoundation 0x00fb40bb -[NSObject(NSObject) doesNotRecognizeSelector:] + 187
3 CoreFoundation 0x00f23966 ___forwarding___ + 966
4 CoreFoundation 0x00f23522 _CF_forwarding_prep_0 + 50
5 UIKit 0x004882b7 -[UISectionRowData refreshWithSection:tableView:tableViewRowData:] + 1834
6 UIKit 0x00485d88 -[UITableViewRowData numberOfRows] + 108
7 UIKit 0x00339677 -[UITableView noteNumberOfRowsChanged] + 132
8 UIKit 0x00346708 -[UITableView reloadData] + 773
9 UIKit 0x00343844 -[UITableView layoutSubviews] + 42
10 QuartzCore 0x01f52a5a -[CALayer layoutSublayers] + 181
11 QuartzCore 0x01f54ddc CALayerLayoutIfNeeded + 220
12 QuartzCore 0x01efa0b4 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 310
13 QuartzCore 0x01efb294 _ZN2CA11Transaction6commitEv + 292
14 QuartzCore 0x01efb46d _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 99
15 CoreFoundation 0x00f9389b __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 27
16 CoreFoundation 0x00f286e7 __CFRunLoopDoObservers + 295
17 CoreFoundation 0x00ef11d7 __CFRunLoopRun + 1575
18 CoreFoundation 0x00ef0840 CFRunLoopRunSpecific + 208
19 CoreFoundation 0x00ef0761 CFRunLoopRunInMode + 97
20 GraphicsServices 0x019091c4 GSEventRunModal + 217
21 GraphicsServices 0x01909289 GSEventRun + 115
22 UIKit 0x002d9c93 UIApplicationMain + 1160
23 Kortspel 0x00002524 main + 102
24 Kortspel 0x000024b5 start + 53
)
terminate called after throwing an instance of 'NSException'
祝你好运, xqtr
答案 0 :(得分:0)
编辑:
我理解关键点是关于IB的警告(开始时没有注意到它)......
你能检查一下ProtokollList.h和ProtokollList.m是否有效地分配给你正在构建的目标? (我想是的,否则你会有更多的链接问题,无论如何,这是一个基本的检查。)
如果没问题,那么我只想尝试清理并重建所有。
如果这不能解决问题,那么这可能意味着链接器在最终二进制文件中没有包含ProtokollList.m,因为有些优化(该类可能永远不会在其余代码中引用,只是在Interface Builder中)。解决此问题的方法是将-all_load
添加到项目的链接器标志中。
如果这没有帮助,我很伤心,但我没有更多建议......
您正在致电:
protokollList.managedObjectContext2 = self.managedObjectContext2;
并且managedObjectContext2
中找不到名为protokollList
的媒体资源。这可以通过以下行来推断:
-[UIViewController setManagedObjectContext2:]: unrecognized selector sent to instance 0x4d13c40
因此,您应该可以在managedObjectContext2
中定义protokollList
(应该是UIViewController
)。
EDIT;
interface ProtokollList : UITableViewController <NSFetchedResultsControllerDelegate> {
NSFetchedResultsController *fetchedResultsController2;
NSManagedObjectContext *managedObjectContext2;
}
@property (nonatomic, retain) NSManagedObjectContext *managedObjectContext2;
@end