적절한 방법으로이 작업을 수행하는 방법이 궁금합니다. NSManagedObject에 name, imageUrl, iconUrl과 같은 속성이 있습니다. 나는이 개체를 업데이트 할 범주를 사용하고 있습니다 : 나는 fetchResultDelegate 내있는 tableView 상쾌 해요코어 데이터가 포함 된 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
}
}
.
이제 몇 가지 질문이 있습니다. 비동기 다운로드로 내 // TODO 섹션에서 이미지를 가져 오는 것이 적절한 방법일까요? fetchResultDelegate는 // TODO2 코드를 실행하면 이미지가 설정되었음을 알려줍니까? 또는 해당 managedObject를 추가하는 스레드와 동기화해야합니까? 그리고 마지막으로 앱이 죽으면 imageDownload를 멈추는 방법은 무엇입니까? myImageNameWithMD5 setter 메소드의 모델 클래스에서이 다운로드를 수행해야합니까?
을 이 문제가 있지만 문제는 URL이 일주일에 한 번 바뀌면 API를 확인하고 이전 이미지를 삭제하고 새 이미지를 저장해야합니다. 이 프레임 워크로 이것을 수행하는 방법? –