2014-11-10 2 views
1

를 죽이는 나는 UIImagePickerController를에서있는 UIImage 얻을, 난과 같이 저장되지 않는 :이있는 UIImage는 문서 디렉토리에 저장 앱

- (void) saveImageLocally:(UIImage *)image { 
    NSData *imageData = UIImagePNGRepresentation(image); 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 

    NSString *imagePath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.png",@"A5UserAvatar"]]; 

    if (![imageData writeToFile:imagePath atomically:NO]) 
    { 
     NSLog(@"Failed to cache image data to disk"); 
    } 
    else 
    { 
     NSLog(@"the cachedImagedPath is %@", imagePath); 
     [[NSUserDefaults standardUserDefaults] setObject:imagePath forKey:@"AvatarKey"]; 
     [[NSUserDefaults standardUserDefaults] synchronize]; 
    } 
} 

내가 할 수있는 바로이 같은 문제없이 접속을 한 후 :

- (UIImage *) getLocalImage { 
    NSString *path = [[NSUserDefaults standardUserDefaults] stringForKey:@"AvatarKey"]; 
    NSLog(@"PATH FOR IMAGE IS %@", path); 
    if (path != nil) { 
     return [UIImage imageWithContentsOfFile:path]; 
    } else { 
     return [UIImage imageNamed:@"default.gif"]; 
    } 
} 

위의 코드는 저장된 UIImage를 전혀 문제없이 반환합니다.

내가 앱을 죽이고 다시 시작하면 문제가 발생합니다. 이미지가 없습니다. 현재 iOS 7 및 8 용 Xcode 6 건물을 사용하고 있습니다.이 문제는 시뮬레이터에서는 필연적이지만, 라이브 장치에서도 발생합니다.

(Xcode 6 keeps renaming my app's directory in iOS8 simulator after each run. 참조)

난 그냥 아바타처럼 사용하는 응용 프로그램에서 파일로 모든 이미지를 저장하는 또 다른 방법이 있다면 내가 잘못하고 또는 무슨을 알고 싶습니다

.

답변

1

문제는 문서 폴더에 상대적인 경로 대신 전체 경로를 저장한다는 것입니다. 앱 경로가 변경 될 수 있으므로 전체 경로를 저장할 수 없습니다.

당신이 뭔가 싶어 : 위의

- (void) saveImageLocally:(UIImage *)image { 
    NSData *imageData = UIImagePNGRepresentation(image); 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 

    NSString *filename = [NSString stringWithFormat:@"%@.png",@"A5UserAvatar"]; 
    NSString *imagePath = [documentsDirectory stringByAppendingPathComponent:filename]; 
    if (![imageData writeToFile:imagePath atomically:NO]) 
    { 
     NSLog(@"Failed to cache image data to disk"); 
    } 
    else 
    { 
     NSLog(@"the cachedImagedPath is %@", imagePath); 
     [[NSUserDefaults standardUserDefaults] setObject:filename forKey:@"AvatarKey"]; 
     [[NSUserDefaults standardUserDefaults] synchronize]; 
    } 
} 

- (UIImage *) getLocalImage { 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 

    NSString *filename = [[NSUserDefaults standardUserDefaults] stringForKey:@"AvatarKey"]; 
    NSString *path = [documentsDirectory stringByAppendingPathComponent:filename]; 
    NSLog(@"PATH FOR IMAGE IS %@", path); 
    if (path != nil) { 
     return [UIImage imageWithContentsOfFile:path]; 
    } else { 
     return [UIImage imageNamed:@"default.gif"]; 
    } 
} 
+0

, 이미지를로드하지만 사망하고 다시 실행 경로를 응용 프로그램의 인쇄를 작동하지 않는 것, 그것은 다른 경로를 출력하고 물론 파일을 찾을 수 없습니다. – user2917941

+0

경로는 이미지 저장시 : 지금 응용 프로그램을 죽이고, 그리고 경로가가 시도 /var/mobile/Containers/Data/Application/D38345C3-473A-485F-A90C-3890736DDD54/Documents/A5UserAvatar.png을 읽는 곳 : /var/mobile/Containers/Data/Application/B5595689-10DA-4BBA-B47E-8E27EDE38AE4/Documents/A5UserAvatar.png – user2917941

+1

오른쪽. 앱을 다시 빌드하고 실행할 때 앱이 새 폴더로 이동합니다. 그러나 빌드간에 기기에서 앱을 삭제하지 않는 한 내용도 이동해야합니다. – rmaddy

관련 문제