核心数据错误:-[myclass encodeWithCoder:]:无法识别的选择器已发送到实例 [英] Core Data error: -[myclass encodeWithCoder:]: unrecognized selector sent to instance

查看:82
本文介绍了核心数据错误:-[myclass encodeWithCoder:]:无法识别的选择器已发送到实例的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个自定义类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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆