我想知道如何以适当的方式做到这一点。 我有NSManagedObject其中包含属性:name,imageUrl,iconUrl。 我使用类别来更新这个对象:Asyc图像与核心数据下载
@implementation MyObject (Create)
+ (instancetype)findOrCreateWithIdentifier:(id)identifier inContext:(NSManagedObjectContext*)context {
NSString* entityName = NSStringFromClass(self);
NSFetchRequest* fetchRequest = [NSFetchRequest fetchRequestWithEntityName:entityName];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"name = %@", identifier];
fetchRequest.fetchLimit = 1;
id object = [[context executeFetchRequest:fetchRequest error:NULL] lastObject];
if(object == nil) {
object = [NSEntityDescription insertNewObjectForEntityForName:entityName inManagedObjectContext:context];
}
return object;
}
+ (void)createWithJSONComponents:(NSDictionary*)components intoContext:(NSManagedObjectContext*)context
{
NSString* name = components[@"name"];
NSString* imageUrl = components[@"image"];
NSString* iconUrl = components[@"icon"];
MyObject* myObject = [self findOrCreateWithIdentifier:myObject inContext:context];
if(!myObject.name)
{
myObject.name = name;
}
if(![imageUrl isEqualToString:myObject.imageURL]
|| !myObject.imageURL)
{
myObject.imageURL = imageUrl;
//TODO remove old image and get new one
//TODO2 in block callback after download myImageNameWithMD5 = imageNameWithMD5
}
if(![iconUrl isEqualToString:myObject.iconUrl]
|| !myObject.iconUrl)
{
myObject.iconUrl = imageUrl;
//TODO remove old image and get new one
//TODO2 in block callback after download myImageNameWithMD5 = imageNameWithMD5
}
}
我刷新我的tableView与fetchResultDelegate。
现在我有几个问题。这将是一个正确的方式来获取图像在我的//TODO部分与异步下载?如果我将执行// TODO2代码,fetchResultDelegate是否会通知我图像已设置?或者我应该这样做,它与添加这些managedObject的线程同步。 终于如何停止imageDownload如果应用程序被杀害? 或者我应该在myImageNameWithMD5 setter方法的模型类中进行此下载?
我在思考解决方案像这样,但问题是我会检查API,如果网址每周更改一次,如果他们这样做,我应该删除旧图像并下载并保存新的图像。 如何用这个框架做到这一点? –