Конфликт сохранения основных данных iPhone

#iphone #cocoa-touch #core-data #file-upload #nsmanagedobjectcontext

#iPhone #cocoa-touch #core-data #загрузка файла #nsmanagedobjectcontext

Вопрос:

Я разрабатываю приложение, которое загружает несколько фотографий и XML-файл за одну попытку. У меня есть две таблицы основных данных с отношением «один-много» (задания и фотографии). Одно задание может содержать несколько фотографий. После загрузки всех фотографий мне нужно загрузить XML-файл, содержащий подробную информацию о фотографиях. Мне нужно отслеживать, какая фотография была успешно загружена, и обновлять поле статуса таблицы заданий, а также статус фотографии. Следующий код иллюстрирует это.

Некоторое время это работает. Некоторое время это не приводит к обновлению таблицы заданий. Я действительно ценю, что кто-нибудь может сообщить мне, что не так со следующим кодом.

 NSMutableArray *photosForJob=[[NSMutableArray alloc] initWithArray:[fetchedJob.photos allObjects]];    
self.manageObjectForJobs = fetchedJob;
    __block int count = 0;

dispatch_group_async(group, queue, ^{ 
for (int i = 0; i < [photosForJob count]; i  ) 
{
    Photos *ph = [photosForJob objectAtIndex:i];

    if ([ph.status compare:[NSNumber numberWithBool:NO]] == NSOrderedSame) 
    {                
        NSMutableArray *responseArray = [self filePosting:ph.photoName];                
        self.manageObjectForPhotos = ph;

        if ([[responseArray objectAtIndex:0] isEqual:@"200"] amp;amp; [[responseArray objectAtIndex:1] isEqualToString:ph.photoName]) 
        {
            [self.manageObjectForPhotos setValue:[NSNumber numberWithBool:YES] forKey:@"status"];                  
            count  ;
        }                
    }
    else{
        count  ;
    }            
}

if (count == [photosForJob count]) 
{
    if ([status compare:[NSNumber numberWithBool:NO]] == NSOrderedSame) 
    {

        NSMutableArray *responseArray = [self filePosting:xmlFile];   

        if ([[responseArray objectAtIndex:0] isEqual:@"200"] amp;amp; [[responseArray objectAtIndex:1] isEqualToString:xmlFile]){

            [self.manageObjectForJobs setValue:[NSNumber numberWithBool:YES] forKey:@"status"];                    
        }
    }
}

NSError *error;
if (![self.managedObjectContext save:amp;error]) {            
    NSLog(@"Job status did updat.... : %@", [error description]);
}
else{            
    [UIApplication sharedApplication].applicationIconBadgeNumber = [self fetchJobsForBadge];
    [photosForJob removeAllObjects];
    count = 0;   
}        
});
  

Большое спасибо

Комментарии:

1. Недостаточно информации для продолжения. Когда вы говорите «загрузить», вы имеете в виду сохранение контекста управляемого объекта? Похоже, здесь нет никаких операций, связанных с сервером. Получение и настройка атрибутов, по-видимому, в значительной степени скрыты.

2. Спасибо за ваш ответ. Метод «Отправки файла» выполняет задание по загрузке и возвращает ответ на загрузку. Если загрузка прошла успешно, обновите статус (контекст управляемого объекта обновления) файла в таблице. С загрузкой файла проблем нет. Ниже приводится определение функции из приведенного выше кода. -(недействительные) шаги загрузки: (задания *) Извлеченные JOBИXML:(NSString *)xmlФайл иxmlстатус: (NSNumber *) статус

3. Выполняется ли «загрузка» на сервер, то есть на другой компьютер в сети?

4. Прошу прощения, что потратил больше времени на ответ. Да, файлы загружаются на удаленный сервер, который имеет общедоступный IP. Эти загрузки происходят через 3G.

5. Я решил проблему. Я изменил использование потока. Я поместил GCD туда, где вызывается вышеупомянутая функция.