Core data 保存NS(可变)阵列的核心数据失败
我的核心数据有问题。我有两个实体(Article和Manufacturer)(一个包含一个可转换属性,它是另一个实体的数组)。在我尝试将数组添加到NSManagedObject之前,一切都正常。下面是一些代码:Core data 保存NS(可变)阵列的核心数据失败,core-data,nsarray,nsmanagedobject,Core Data,Nsarray,Nsmanagedobject,我的核心数据有问题。我有两个实体(Article和Manufacturer)(一个包含一个可转换属性,它是另一个实体的数组)。在我尝试将数组添加到NSManagedObject之前,一切都正常。下面是一些代码: @implementation HASArticleInitializer - (void)initialize:(NSArray *)initArray { //Alloc and init some local variables NSMutableArray *a
@implementation HASArticleInitializer
- (void)initialize:(NSArray *)initArray {
//Alloc and init some local variables
NSMutableArray *articleEntitiesArray = [NSMutableArray alloc] init];
for (NSInteger pageIndex = 1; pageIndex <= pageCount; pageIndex++) {
//Parsing the website
//For-loop for every object on every page
for (NSInteger object = 0; object < [articleNumbersOnOnePageArray count]; object++) {
//Doing other string manipulation and parsing stuff
NSManagedObject *newArticleEntry = [NSEntityDescription insertNewObjectForEntityForName:@"Article"inManagedObjectContext:context];
[newArticleEntry setValue:[NSString stringWithFormat:@"%@_%@", manufacturerNumber, articleNumber] forKey:@"number"];
[newArticleEntry setValue:articleTextComplete forKey:@"text"];
[newArticleEntry setValue:articleStatus forKey:@"status"];
[newArticleEntry setValue:manufacturerName forKey:@"manufacturerName"];
[newArticleEntry setValue:manufacturerNumber forKey:@"manufacturerID"];
[articleEntitiesArray addObject:newArticleEntry];
}
}
NSManagedObject *newManufacturerEntry = [NSEntityDescription insertNewObjectForEntityForName:@"Manufacturer" inManagedObjectContext:context];
//Encoding the NSArray and setting the entity attribute to Binary Data doesn't work neither
//NSData *arrayData = [NSKeyedArchiver archivedDataWithRootObject:articleEntitiesArray];
[newManufacturerEntry setValue:manufacturerName forKey:@"name"];
[newManufacturerEntry setValue:manufacturerNumber forKey:@"manufacturerID"];
[newManufacturerEntry setValue:manufacturerCount forKey:@"count"];
[newManufacturerEntry setValue:articleEntitiesArray forKey:@"articles"];
NSLog(@"%@", articleEntitiesArray);
}
@end
核心数据模型:
正如我所说的,如果不保存阵列,一切都正常,NSLog也是正确的。如果重要的话,我会使用NSThreads(但我不这么认为,因为其他一切都很好):-(
请帮帮我!非常感谢!:-(可转换属性通过键控存档/非存档进行存档…但是NSManagedObject不是设计为以这种方式存档的。(它没有实现
NSCoding
协议。)
要解决这个问题,您可以将托管对象转换为字典表示形式,但最自然的做法似乎是在这两个实体之间使用核心数据关系。您没有在此处建立关系模型是有原因的吗?可转换属性通过键控存档/取消存档进行存档…但NSManagedObject不是t设计为以这种方式存档。(它不实现
NSCoding
协议。)
要解决这个问题,您可以将托管对象转换为字典表示形式,但最自然的做法似乎是在这两个实体之间使用核心数据关系。您没有在此处建立关系模型有什么原因吗?实际上,我确实在它们之间建立了关系,但我认为我没有使用它们(我添加了上面模型的图片。我的应用程序中有两个TableView,一个显示制造商,另一个显示所属文章。因此我将ArticleController的内容数组绑定到ManufactureRayController。对不起,我没有仔细阅读。为什么要保存数组?因为我想在文章中显示它们。)lesTableView。有没有办法不用数组?或者不用保存数组?好吧(几乎)核心数据的全部要点是持久性…无论如何,相同的信息存储在您的关系中。对于您的表,只需执行核心数据获取(查询)即可获取您想要在表中显示的感兴趣的对象。这就是您的意思吗?对不起,我睡着了;-)(在德国已经是晚上了)…是的,这正是我想要的,也是我试图做到的,但我没有成功。这就是为什么我改变了制造商实体来持有一系列文章。你能告诉我怎么做吗?(感谢你的耐心!)事实上,我确实与他们有关系,但我认为我没有使用他们(我添加了上面模型的图片。我的应用程序中有两个TableView,一个显示制造商,另一个显示所属文章。因此我将ArticleController的内容数组绑定到ManufactureRayController。对不起,我没有仔细阅读。为什么要保存数组?因为我想在文章中显示它们。)lesTableView。有没有办法不用数组?或者不用保存数组?好吧(几乎)核心数据的全部要点是持久性…无论如何,相同的信息存储在您的关系中。对于您的表,只需执行核心数据获取(查询)即可获取您想要在表中显示的感兴趣的对象。这就是您的意思吗?对不起,我睡着了;-)(在德国已经是晚上了)…是的,这正是我想要的,也是我试图做到的,但我没有成功。这就是为什么我改变了制造商实体来持有一系列文章。你能告诉我怎么做吗?(谢谢你的耐心!)
[15836:a057] -[NSManagedObject encodeWithCoder:]: unrecognized selector sent to instance 0x1001896e0
[15836:a057] An uncaught exception was raised
[15836:a057] -[NSManagedObject encodeWithCoder:]: unrecognized selector sent to instance 0x1001896e0
[15836:a057] (
0 CoreFoundation 0x00007fff8dc94716 __exceptionPreprocess + 198
1 libobjc.A.dylib 0x00007fff8bfe6470 objc_exception_throw + 43
2 CoreFoundation 0x00007fff8dd2ad5a -[NSObject(NSObject) doesNotRecognizeSelector:] + 186
3 CoreFoundation 0x00007fff8dc82c3e ___forwarding___ + 414
4 CoreFoundation 0x00007fff8dc82a28 _CF_forwarding_prep_0 + 232
5 Foundation 0x00007fff86931401 _encodeObject + 1163
6 Foundation 0x00007fff869323cc -[NSKeyedArchiver _encodeArrayOfObjects:forKey:] + 410
7 Foundation 0x00007fff869320c9 -[NSArray(NSArray) encodeWithCoder:] + 473
8 Foundation 0x00007fff86931401 _encodeObject + 1163
9 Foundation 0x00007fff869358f9 +[NSKeyedArchiver archivedDataWithRootObject:] + 182
10 iLoadPix 0x0000000100003c21 -[HASArticleInitializer initialize:] + 3793
11 Foundation 0x00007fff86926842 __NSThread__main__ + 1345
12 libsystem_c.dylib 0x00007fff88553782 _pthread_start + 327
13 libsystem_c.dylib 0x00007fff885401c1 thread_start + 13