Обновление NSManagedObjects через userInfo - PullRequest
0 голосов
/ 23 марта 2012

Я пишу утилиту для асинхронной загрузки фотографий с устройства iOS на веб-сервер.Каждая фотография представлена ​​сущностью Photo Core Data, которая имеет свойство для имени файла фотографии в файловой системе и логическое свойство has_been_uploaded.

Я хочу построить очередь из этих изображений для загрузкизатем установите для свойства has_been_uploaded значение YES после завершения загрузки.Я использую ASIHTTPRequest и ASINetworkQueue для сетевой стороны.

Получение необходимых изображений из Core Data и их загрузка работает нормально, моя проблема заключается в обновлении свойства has_been_uploaded для правильной сущности.

Мой код на данный момент таков:

for (Photo *myPhoto in [fetchedResultsController fetchedObjects]) {
    if(myPhoto.path != nil) {
        __block ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:@"http://example.com/postimage"]];

        NSString *imagePath = [NSString stringWithFormat:@"%@.png",[documentsDirectory stringByAppendingPathComponent:[myPhoto valueForKey:@"path"]]];
        [request addFile:imagePath withFileName:[NSString stringWithFormat:@"%@.png",myPhoto.path] andContentType:@"image/png" forKey:@"image"];
        [request.userInfo setValue:myPhoto forKey:@"photo"];
        [[self imageUploadQueue] addOperation:request];
    }
}
[[self imageUploadQueue] go];

Но тогда в методе делегата didComplete ASIHTTPRequest объект Photo всегда равен нулю, когда я пытаюсь извлечь его из словаря userInfo запроса:1014 *

- (void)queueRequestFinished:(ASIHTTPRequest *)request
{
    Photo *photo = (Photo *)[request.userInfo valueForKey:@"photo"];
    NSLog(@"uploaded image for photo: %@",photo);
}

Как можно надежно извлечь правильный объект Базовые данные, чтобы я мог обновлять его состояние после завершения каждого запроса?

Спасибо!

1 Ответ

0 голосов
/ 26 марта 2012

Так как каждый управляемый объект связан с его управляемым контентом, я думаю, вы просто не можете отправить объект через Интернет, а затем вернуть его, потому что он потеряет свою ссылку на контекст, поэтому вам лучше просто отправить NSmanagedObjectID а затем получить объект из вашего контекста, используя этот идентификатор.

...