Почему этот код дает мне ноль? - PullRequest
1 голос
/ 03 марта 2012

Прокрутите вниз до РЕДАКТИРОВАТЬ 1. Этот старший бит сейчас не имеет значения.

Это мой код:

NSMutableDictionary *dictionary = [self.media objectAtIndex:index];
    NSLog(@"dictionary: %@", dictionary);
    NSString *originalImagePath = [dictionary objectForKey:@"OriginalImage"];
    NSLog(@"path: %@", originalImagePath);
    UIImage *originalImage = [UIImage imageWithContentsOfFile:originalImagePath];
    NSLog(@"original image: %@", originalImage);
    return originalImage;

И мой NSLog:

dictionary: {
    IsInPhotoLibrary = 1;
    MediaType = 0;
    OriginalImage = "/var/mobile/Applications/5E25F369-9E05-4345-A0A2-381EDB3321B8/Documents/Images/E9904811-B463-4374-BD95-4AD472DC71A6.jpg";
}
path: /var/mobile/Applications/5E25F369-9E05-4345-A0A2-381EDB3321B8/Documents/Images/E9904811-B463-4374-BD95-4AD472DC71A6.jpg
original image: (null)

Любые идеи, почему это может быть нулевым, несмотря на то, что все выглядит на месте?

РЕДАКТИРОВАТЬ:

Это код для записи изображения в файл:

+(NSString *)writeImageToFile:(UIImage *)image {
    NSData *fullImageData = UIImageJPEGRepresentation(image, 1.0f);

NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Images/"];
NSString *name = [NSString stringWithFormat:@"%@.jpg", [JEntry generateUuidString]];
NSString *filePath = [path stringByAppendingPathComponent:name];
[fullImageData writeToFile:filePath atomically:YES];
NSLog(@"original image 2: %@", [UIImage imageWithContentsOfFile:filePath]);
}

Этот NSLog также имеет нулевое значение.Так что проблема, скорее всего, в этом.Любые идеи?

РЕДАКТИРОВАТЬ 2:

Итак, теперь отслеживание еще больше, и я понял, что это потому, что это не удается:

[fullImageData writeToFile:filePath atomically:YES];

Вы можете вернутьсябул на этой линии, говорящий, был ли он успешным или нет, и он возвращает мне НЕТ.Любые идеи, почему это может быть?

РЕДАКТИРОВАТЬ 3:

Изображение, которое передается в NULL.Пытаюсь выяснить, где это сейчас пошло не так.

Ответы [ 4 ]

3 голосов
/ 03 марта 2012

Почти наверняка ваш файл не существует.Измените ваш код следующим образом, чтобы регистрировать, существует ли файл:

NSString *originalImagePath = [dictionary objectForKey:@"OriginalImage"];
NSLog(@"path: %@", originalImagePath);
BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:originalImagePath];
NSLog(@"file exists: %d", fileExists);
2 голосов
/ 03 марта 2012

Возможные причины:

  • Файл в originalImagePath не существует.
  • UIImage не может инициализировать изображение из указанного файла, поскольку данные повреждены (возможно, данныепустой или неполный)
  • файл недоступен из-за прав доступа к файлам iOS (т. е. при доступе к файлам вне изолированной программной среды приложения)
1 голос
/ 03 марта 2012

Вы уверены, что файл jpg "E9904811-B463-4374-BD95-4AD472DC71A6.jpg" находится в этой папке?попробуйте открыть файл приложения, установленный в симуляторе iPhone / ipad, нажав yourFile.app с помощью клавиши ctrl, и выберите, чтобы открыть содержимое пакета, открыть изображения в папке ...

, чтобы получить быструю ссылку на папку с документами.:

NSArray *dirPaths;
NSString *docsDir;
dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 
                                               NSUserDomainMask, YES);
docsDir = [dirPaths objectAtIndex:0];
NSLog(@"doc:%@",docsDir);

ваше приложение должно находиться в родительской папке

1 голос
/ 03 марта 2012

Вы проверили, что файл изображения действительно помещен в путь в словаре? Для этого вы можете использовать утилиту iExplorer .

Также обратите внимание на регистр имени файла, поэтому его расширение - «jpg», а не «JPG».

Наконец, вы должны проверить, является ли это допустимый файл изображения, открыв его с помощью какого-либо средства просмотра изображений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...