gpt4 book ai didi

ios - 与 iOS 核心数据的一对多关系

转载 作者:行者123 更新时间:2023-11-29 12:56:12 26 4
gpt4 key购买 nike

我知道在 SO 上有很多与此主题相关的问题,但我似乎找不到能回答我问题的问题!

我在 FactSheet 和 Image 之间建立了关系,如下所示: FactSheet and Image relationship

我正在解析一个内部 JSON 文件(仅一次)以将数据导入 Core Data。

int main(int argc, const char * argv[])
{

@autoreleasepool {
// Create the managed object context
NSManagedObjectContext *context = managedObjectContext();

// Save the managed object context
NSError *error = nil;
if (![context save:&error]) {
NSLog(@"Error while saving %@", ([error localizedDescription] != nil) ? [error localizedDescription] : @"Unknown Error");
exit(1);
}

NSError* err = nil;
NSString* dataPath = [[NSBundle mainBundle] pathForResource:@"FactSheets" ofType:@"json"];
NSArray* FactSheets = [NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfFile:dataPath]
options:kNilOptions
error:&err];

[FactSheets enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
FactSheet *factSheet = [NSEntityDescription
insertNewObjectForEntityForName:@"FactSheet"
inManagedObjectContext:context];
factSheet.name = [obj objectForKey:@"name"];
factSheet.details = [obj objectForKey:@"details"];

NSArray* images=[obj objectForKey:@"images"];


[images enumerateObjectsUsingBlock:^(id img, NSUInteger idx, BOOL *stop) {

Image *image = [NSEntityDescription insertNewObjectForEntityForName:@"Image"
inManagedObjectContext:factSheet.managedObjectContext];


image.path = [img objectForKey:@"path"];

if([img objectForKey:@"caption"]!=[NSNull null]) {
image.caption = [img objectForKey:@"caption"];
}

if([img objectForKey:@"label"]!=[NSNull null]) {
image.label = [img objectForKey:@"label"];
}

if([img objectForKey:@"galleryThumb"]!=[NSNull null]) {
image.galleryThumb = [img objectForKey:@"galleryThumb"];
}

[factSheet addImageObject:image];

}];



NSError *error;
if (![context save:&error]) {
NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]);
}
}];

//Test listing
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"FactSheet"
inManagedObjectContext:context];
[fetchRequest setEntity:entity];
NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];
for (FactSheet *fs in fetchedObjects) {
NSLog(@"Name: %@", fs.name);
for (Image *i in fs.images) {
NSLog(@"Image Path: %@",i.path);
}
}

}



return 0;
}

运行此程序直到我尝试使用 NSLog 将其打印出来。它在以下行中断:

for (Image *i in fs.images) {

出现“无法识别的选择器发送到实例”错误。当我在 SQLite 数据库浏览器中打开 .sqlite 文件时,数据似乎已按照我的预期插入(尽管我绝不是 SQLite 专家!)。

我想我的问题是:我是否正确地将对象插入到核心数据中,只是在我尝试将其打印出来时不正确——或者——,我应该以不同的方式将对象存储到核心数据中吗?

谢谢!

最佳答案

将调用更改为:for (Image *i in fs.image) {

根据您的模型,关系名称为 image,因此您可以更新模型或循环代码。

关于ios - 与 iOS 核心数据的一对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21029904/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com