#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 туда, где вызывается вышеупомянутая функция.