Операция не могла быть завершена. Операция не разрешена
очень странная проблема с моим приложением для iPhone. У нас есть приложение, которое было одобрено и продается в App Store. Он содержит функцию для загрузки некоторых обновлений базы данных. Обновление поставляется в ZIP через HTTP. Проблема в том, что я не могу сохранить этот загруженный ZIP, потому что я получаю "операция не может быть завершена. Операция не разрешена " ошибка.
но: это происходит на 2 телефонах из 10. Если телефон не может сохранить файл, он не может делать вообще. Если я перезагрузить приложение из магазина его не меняют. Но те телефоны, которые способны сохранить ZIP, всегда способны. Все телефоны работают с одной и той же версией iOS, и все они iPhone 4. Это действительно сводит меня с ума.
Если я запускаю XCode, один телефон не дает ошибки в отладке, другой дает. И они всегда дают.
вот код:
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
[activeResponse release];
[theConnection release];
NSLog(@"%d", [receivedData length]);
NSString *s = [[NSString alloc] initWithData:receivedData encoding:NSASCIIStringEncoding];
NSLog(@"%@", s);
[s release];
[theRequest release];
NSString *path = [NSString stringWithFormat:@"%@/%@", [[NSBundle mainBundle] resourcePath], @"temp.zip"];
NSLog(path);
NSError * error;
if ([receivedData writeToFile:path options:NSDataWritingAtomic error:&error])
NSLog(@"Success");
else
NSLog(@"Error");
if (error)
NSLog([error description]);
любые идеи, пожалуйста?
1 ответов
вам не разрешено писать в пакет приложений, я удивлен, что он работает на любом из ваших устройств. Есть различные места, которые вы можете написать, в зависимости от того, какова ваша цель:
- если вы хотите сохранить файл до его удаления, напишите в каталог документов:
[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]
- если вы хотите разрешить системе удалить его, если устройство работает на низком пространстве (и не заботится, если он сохраняется при резервном копировании устройства), используйте каталог кэшей:
[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0]
- если вы просто сохраняете его временно во время обработки и сразу же удаляете, используйте временный каталог:
NSTemporaryDirectory()
кроме того, кстати, может быть чище использовать [directory stringByAppendingPathComponent:filename]
, а не [NSString stringWithFormat:@"%@/%@", directory, filename]
для построения путей.