核心数据错误:-[myclass encodeWithCoder:]:无法识别的选择器已发送到实例 [英] Core Data error: -[myclass encodeWithCoder:]: unrecognized selector sent to instance
问题描述
我有一个自定义类MyClass,该类实际上由几个NSMutableArrays组成,没有其他变量。我有一个实体MyEntity,它具有一个MyClass的ivar。当我尝试保存实体时,我得到了这个堆栈转储:
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
有人对这有何建议吗?我相信它可能与MyClass有关,但是我应该如何解决呢?我忘了为此写东西了吗?
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?
推荐答案
您如何在实体中定义myClass ivar?您可以使用Transformable属性来保存非标准类型。这个想法是,Core Data在后台使用NSValueTransformer实例在NSData实例之间来回转换属性。
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将数据实例存储到持久性存储中。
Core Data then stores the data instance to the persistent store.
默认情况下使用NSKeyedUnarchiverFromDataTransformerName,意味着您的自定义类必须实现NSCoding协议(并支持键存档)
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.
这篇关于核心数据错误:-[myclass encodeWithCoder:]:无法识别的选择器已发送到实例的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!