我是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
目录。
目前,核心数据没有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;
答案 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但您还没有提到或分享。