重新加载整个核心数据对象而不是添加特定数据

时间:2017-06-27 03:30:22

标签: ios core-data

我是iOS新手。我是Core Data的新手。我正从我教授的前研究生那里接管一个项目的代码库。

当我的应用程序从其数据库中提取图像时,img的路径为:

/Users/matt/Library/Developer/CoreSimulator/Devices/DA58E774-84BE-48F6-B50F-5921F682E87B/data/Containers/Bundle/Application/DA30DEFB-D90B-4D52-8462-3F8A5F4C55ED/Leaflet-US.app/thumbnail/species/Abies fraseri/images/LTV-BAM-2848_crop.jpg

由于路径中包含CoreSimulator/Devices,我认为它会在应用的核心数据中查找图像。我可能是错的,所以如果我错了请纠正我。

我的应用程序资源文件中也有一个缩略图版本,您可以看到它包含Abies fraseri目录。

enter image description here

目前,核心数据没有Abies fraseri目录。我知道这一点,因为在终端我可以cd进入/Users/matt/Library/Developer/CoreSimulator/Devices/DA58E774-84BE-48F6-B50F-5921F682E87B/data/Containers/Bundle/Application/DA30DEFB-D90B-4D52-8462-3F8A5F4C55ED/Leaflet-US.app/thumbnail/species/并验证Abies fraseri不存在。我想更新核心数据的thumbnail/species版本,以便它拥有它。

从我seen in这些帖子中,您可以通过将特定的键/值对添加到由fetch产生的数组中来更新核心数据的对象。

示例:

NSManagedObject *entityNameObj = [NSEntityDescription insertNewObjectForEntityForName:@"EntityName" inManagedObjectContext:context];
[entityNameObj setValue:@"someValue" forKey:@"someKey"];

但是,有没有办法删除并重新输入缩略图,而不是必须通过并指定每个新的键值对?我问,因为我用200个新物种更新了本地数据库缩略图,每个物种都是一个包含多个图像的目录。

获取请求,如果适用:

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSManagedObjectContext* context = [(LeafletAppDelegate*)[[UIApplication sharedApplication] delegate] managedObjectContext];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Species" inManagedObjectContext:context] ;
    [fetchRequest setEntity:entity];


    if (predicate)
    {
        [fetchRequest setPredicate:predicate];
    }

    [fetchRequest setSortDescriptors:sortDescriptors];

    // Create and initialize the fetch results controller.
    NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:context sectionNameKeyPath:sectionNameKeyPath cacheName:nil];

    self.fetchedResultsController = aFetchedResultsController;
    fetchedResultsController.delegate = self;

    // Memory management.
    [aFetchedResultsController release];
    [fetchRequest release];

    return fetchedResultsController;

1 个答案:

答案 0 :(得分:0)

  

由于CoreSimulator / Devices包含在路径中,我假设它在应用程序的核心数据中查找图像。我可能是错的,所以如果我错了,请纠正我。

你错了。除非您进行特定的Core Data调用以保存数据,否则不会进入Core Data。 " CoreSimulator"在路径中意味着您正在查看模拟器使用的文件,并且与您是否使用Core Data无关。因此,代码中有关执行获取请求的部分无用,除非您还有其他代码可以保存到您尚未提及的Core Data。你还没有把任何东西放在核心数据中,因此没有东西可以获取。

  

我的app资源文件中也有一个缩略图版本,你可以看到它包含Abies fraseri目录。

我们实际上不能。屏幕截图显示的是它在Xcode项目中的存在。当你构建应用程序时,这并不意味着它包含在应用程序中。项目中的文件可能不是构建的一部分。这有多种原因,包括具有多个目标但不包含所有相同文件的项目(例如应用和应用扩展)。

但它也可能意外地将文件从目标中删除,这可能是导致问题的原因。选择有问题的图像,然后在窗口右侧打开Xcode的文件检查器。查看"目标会员资格"部分,并确保应用程序目标旁边有一个复选标记。

另一种可能性 - 不太可能但并非不可能 - 是你只是在错误的地方寻找。 Xcode支持许多不同的模拟器,所有模拟器都独立于其他模拟器。您可以为一个模拟器构建,但检查另一个模拟器的文件路径。例如,您可能正在构建iPhone 7模拟器,但查看iPhone SE模拟器的文件路径。文件未被共享,因此更新文件不会影响其他文件。

无论实际原因如何,您的问题似乎归结为文件管理之一并且与Core Data无关 - 再次,除非您有其他代码写入Core Data但您还没有提到或分享。