Удалить изображение из каталога приложения в iPhone - PullRequest
6 голосов
/ 23 февраля 2012

Я хочу удалить изображение из моего приложения для iPhone.Я использую метод ниже, передавая имя изображения в качестве аргумента.

Проблема в том, что изображение не удалено.

- (void)removeImage:(NSString*)fileName {

    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:
                      [NSString stringWithFormat:@"%@.png", fileName]];

    [fileManager removeItemAtPath: fullPath error:NULL];
    NSLog(@"image removed: %@", fullPath);

    NSString *appFolderPath = [[NSBundle mainBundle] resourcePath];    
    NSLog(@"Directory Contents:\n%@", [fileManager directoryContentsAtPath: appFolderPath]);
}

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

Ответы [ 3 ]

5 голосов
/ 23 февраля 2012

Вы пытаетесь удалить файл в каталоге документов.Затем вы читаете содержимое каталога ресурсов пакета.Это не один и тот же каталог.

Если вы пытаетесь удалить файл в каталоге «Документы», в конце вы должны указать этот каталог в NSLog ().Если вы пытаетесь удалить файл внутри вашего пакета, это невозможно.Пакеты приложений подписаны и не могут быть изменены.

4 голосов
/ 23 февраля 2012

ваш код выглядит нормально, поэтому попробуйте добавить в код какой-нибудь объект 'NSError':

- (void)removeImage:(NSString*)fileName {

   NSFileManager *fileManager = [NSFileManager defaultManager];
   NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,   YES);
   NSString *documentsDirectory = [paths objectAtIndex:0];
   NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:
                      [NSString stringWithFormat:@"%@.png", fileName]];

   NSError *error = nil;
   if(![fileManager removeItemAtPath: fullPath error:&error]) {
      NSLog(@"Delete failed:%@", error);
   } else {
      NSLog(@"image removed: %@", fullPath);
   }

   NSString *appFolderPath = [[NSBundle mainBundle] resourcePath];    
   NSLog(@"Directory Contents:\n%@", [fileManager directoryContentsAtPath: appFolderPath]);
}

В приведенном выше коде я передал NSError параметр ошибки removeItemAtPath. Если система не может удалить файл, этот метод вернет NO и заполнит объект error с возникшей ошибкой.

2 голосов
/ 23 февраля 2012

На основании вашего комментария я обнаружил, что вы пытаетесь удалить файл default.png и заменить его другим.К сожалению, это невозможно.Образ default.png является частью вашего пакета приложений, который нельзя изменить после того, как он был создан и подписан (это мера безопасности от Apple, поэтому приложения не могут измениться после того, как они были рассмотрены).Единственные места, где вы можете создавать и удалять файлы, находятся в изолированной программной среде, предоставленной вашему приложению (папка «Документы»).

...