Ошибка основных данных: - [myclass encodeWithCoder:]: нераспознанный селектор отправлен на экземпляр - PullRequest
2 голосов
/ 15 мая 2011

У меня есть собственный класс MyClass, который по сути состоит из нескольких NSMutableArrays и не содержит никаких других переменных. У меня есть сущность MyEntity, которая имеет ивар, который имеет MyClass. Когда я пытаюсь сохранить сущность, я получаю этот дамп стека:

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, но как мне это исправить? Я забыл написать что-нибудь для этого?

1 Ответ

3 голосов
/ 15 мая 2011

Как вы определили myClass ivar в вашей сущности? Вы можете использовать атрибут Transformable для хранения нестандартного типа. Идея состоит в том, что Core Data использует за кулисами экземпляр NSValueTransformer для преобразования атрибута в экземпляр NSData и из него.

Базовые данные затем сохраняют экземпляр данных в постоянном хранилище.

По умолчанию используется NSKeyedUnarchiverFromDataTransformerName, это означает, что ваш пользовательский класс должен реализовывать протокол NSCoding (с поддержкой архивации по ключу)

Проверьте «Нестандартные постоянные атрибуты» в Руководстве по программированию основных данных для получения более подробной информации и описания другого способа сделать то же самое.

...