Операция не могла быть завершена. Операция не разрешена

очень странная проблема с моим приложением для 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] для построения путей.