问题
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?
回答1:
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.
来源:https://stackoverflow.com/questions/6007588/core-data-error-myclass-encodewithcoder-unrecognized-selector-sent-to-inst