核心数据错误:-[myclassencodeWithCoder:]:无法识别的选择器发送到实例
我有一个自定义类 MyClass,它本质上由几个 NSMutableArrays 组成,没有其他变量。我有一个实体 MyEntity,它有一个属于 MyClass 的 ivar。当我尝试保存实体时,我得到这个堆栈转储:
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 有关,但我应该如何解决这个问题?我是不是忘记写点什么了?
I have a custom class MyClass that is essentially made up of several NSMutableArrays and no other variables. I have an entity MyEntity that has an ivar that is of MyClass. When I try to save the entity, I get this stack dump:
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
Does anyone have any suggestions at all what may be causing this? I believe it's probably related to MyClass, but how should I go about fixing this? Did I forget to write something for it?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您如何在实体中定义 myClass ivar?您可以使用 Transformable 属性来保存非标准类型。这个想法是,Core Data 在幕后使用 NSValueTransformer 的实例将属性与 NSData 的实例相互转换。
然后,Core Data 将数据实例存储到持久存储中。
默认情况下使用 NSKeyedUnarchiverFromDataTransformerName,这意味着您的自定义类必须实现 NSCoding 协议(支持 keyed-archiving)。
请检查核心数据编程指南中的“非标准持久属性”以获取更多详细信息和完成此操作的另一种方法的描述相同的。
How did you define the myClass ivar in your entity? You can use a Transformable attribute to hold a non standard type. The idea is that Core Data uses behind the scenes an instance of NSValueTransformer to convert the attribute to and from an instance of NSData.
Core Data then stores the data instance to the persistent store.
By default is used the NSKeyedUnarchiverFromDataTransformerName, this means your custom class must implement the NSCoding protocol (with support for keyed-archiving)
Check "Non-Standard Persistent Attributes" in the Core Data Programming Guide for more details and description of another way to accomplish the same.