Ios 核心数据错误:-[myclass EncoderWithCoder:]:发送到实例的选择器无法识别
我有一个自定义类MyClass,它基本上由几个NSMutableArray组成,没有其他变量。我有一个实体MyEntity,它有一个属于MyClass的ivar。当我试图保存实体时,我得到以下堆栈转储:Ios 核心数据错误:-[myclass EncoderWithCoder:]:发送到实例的选择器无法识别,ios,iphone,core-data,selector,encode,Ios,Iphone,Core Data,Selector,Encode,我有一个自定义类MyClass,它基本上由几个NSMutableArray组成,没有其他变量。我有一个实体MyEntity,它有一个属于MyClass的ivar。当我试图保存实体时,我得到以下堆栈转储: 0 CoreFoundation 0x0118ebe9 __exceptionPreprocess + 185 1 libobjc.A.dylib 0x012e35c2 objc_exception_thr
0 CoreFoundation 0x0118ebe9 __exceptionPreprocess + 185
1 libobjc.A.dylib 0x012e35c2 objc_exception_throw + 47
2 CoreFoundation 0x011906fb -[NSObject(NSObject) doesNotRecognizeSelector:] + 187
3 CoreFoundation 0x01100366 ___forwarding___ + 966
4 CoreFoundation 0x010fff22 _CF_forwarding_prep_0 + 50
5 Foundation 0x00091bf6 _encodeObject + 1076
6 Foundation 0x0009d041 +[NSKeyedArchiver archivedDataWithRootObject:] + 206
7 CoreData 0x00eb7255 -[NSSQLiteConnection execute] + 2677
8 CoreData 0x00f0b646 -[NSSQLiteConnection insertRow:] + 262
9 CoreData 0x00f082d4 -[NSSQLConnection performAdapterOperations:] + 180
10 CoreData 0x00f07f7e -[NSSQLCore _performChangesWithAdapterOps:] + 494
11 CoreData 0x00f06a5a -[NSSQLCore performChanges] + 410
12 CoreData 0x00f004a8 -[NSSQLCore saveChanges:] + 216
13 CoreData 0x00ebe739 -[NSSQLCore executeRequest:withContext:error:] + 409
14 CoreData 0x00f6eb1b -[NSPersistentStoreCoordinator executeRequest:withContext:error:] + 3691
15 CoreData 0x00ef6db8 -[NSManagedObjectContext save:] + 712
16 MyProgram 0x00006d19 -[DataParser parser:didEndElement:namespaceURI:qualifiedName:] + 1665
17 Foundation 0x00104a19 _endElementNs + 453
18 libxml2.2.dylib 0x01620e63 xmlParseXMLDecl + 1346
19 libxml2.2.dylib 0x0162bb6d xmlParseChunk + 3984
20 Foundation 0x0010421a -[NSXMLParser parse] + 321
21 MyProgram 0x0000653e -[DataParser parseXMLFileAtURL:parseError:] + 176
22 MyProgram 0x00002912 -[MyProgramAppDelegate application:didFinishLaunchingWithOptions:] + 664
23 UIKit 0x002cc1fa -[UIApplication _callInitializationDelegatesForURL:payload:suspended:] + 1163
24 UIKit 0x002ce55e -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 439
25 UIKit 0x002d8db2 -[UIApplication handleEvent:withNewEvent:] + 1533
26 UIKit 0x002d1202 -[UIApplication sendEvent:] + 71
27 UIKit 0x002d6732 _UIApplicationHandleEvent + 7576
28 GraphicsServices 0x01ac4a36 PurpleEventCallback + 1550
29 CoreFoundation 0x01170064 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52
30 CoreFoundation 0x010d06f7 __CFRunLoopDoSource1 + 215
31 CoreFoundation 0x010cd983 __CFRunLoopRun + 979
32 CoreFoundation 0x010cd240 CFRunLoopRunSpecific + 208
33 CoreFoundation 0x010cd161 CFRunLoopRunInMode + 97
34 UIKit 0x002cdfa8 -[UIApplication _run] + 636
35 UIKit 0x002da42e UIApplicationMain + 1160
36 MyProgram 0x000023e6 main + 84
37 MyProgram 0x00002389 start + 53
有没有人有任何建议,到底是什么原因导致了这种情况?我相信这可能与MyClass有关,但我应该如何着手解决这个问题?我忘记为它写点什么了吗?您是如何在实体中定义myClass ivar的?可以使用可转换属性来保存非标准类型。其思想是,核心数据在幕后使用NSValueTransformer实例将属性与NSData实例进行转换 核心数据然后将数据实例存储到持久存储 默认情况下,NSKeyedUnachiverFromDataTransformerName使用,这意味着您的自定义类必须实现NSCoding协议(支持键控存档)
查看《核心数据编程指南》中的“非标准持久属性”,了解更多详细信息和实现相同功能的其他方法的说明。在数据模型中,我将myClass作为可转换类型。自动生成的实体文件将myClass列为id*myClass。那么除了在@implementation for myClass中实现NSCoding之外,我还应该做什么呢?您应该只需要实现NSCoding。