UIImage не загружается, но файл есть - PullRequest
4 голосов
/ 29 ноября 2009

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

Вот код, который пытается загрузить изображение:

- (UIImage*) CPPlistImageToUIImage: (NSString *) CPPlistImage {
    /*TODO: Is this a memory leak? Find out*/
    UIImage * ret = [UIImage imageNamed: CPPlistImage];
    if(ret == nil){
        RDLogString(@"Warning: Failed to load image: \"%@\"", CPPlistImage);
    }

    return ret;
}

А вот функция, которая перечисляет все файлы в каталоге, где эта функция выглядит:

- (void) lsOwnDirectory {
    NSError * error = [[NSError alloc] init];
    NSArray * files = [[NSFileManager defaultManager] contentsOfDirectoryAtPath: pathToOwnDirectory error: &error];

    for(NSString * file in files){
        RDLogString(@"%@", file);
    }
}

А вот пример вывода обеих функций за один прогон:

// CPPlist...Image telling he can't find/load the image
2009-11-29 02:12:51.510 CPPlayer[6452:207] CPConversation.m:113 Warning: Failed to load image: "/Users/nick/Library/Application Support/iPhone Simulator/User/Applications/D3403591-3A56-4F05-B4C1-C21DAAF918A2/CPPlayer.app/CP.Resources/CP.Conversations/Supermarkt/OIGNONS.png"
...
// lsOwnDirectory is called AFTER CPPList...Image
2009-11-29 02:12:51.557 CPPlayer[6452:207] RootViewController.m:81 Contents of /Users/nick/Library/Application Support/iPhone Simulator/User/Applications/D3403591-3A56-4F05-B4C1-C21DAAF918A2/CPPlayer.app/CP.Resources/CP.Conversations/Supermarkt
2009-11-29 02:12:51.566 CPPlayer[6452:207] CPConversation.m:133 audio
2009-11-29 02:12:51.567 CPPlayer[6452:207] CPConversation.m:133 CPConversation.plist
2009-11-29 02:12:51.568 CPPlayer[6452:207] CPConversation.m:133 CPData.sqlite
2009-11-29 02:12:51.569 CPPlayer[6452:207] CPConversation.m:133 images
2009-11-29 02:12:51.570 CPPlayer[6452:207] CPConversation.m:133 OIGNONS.png

Понятия не имею, почему он не может найти файл. Одна функция это видит, другая нет, кажется, они выглядят в одном каталоге ...

Любая помощь, с благодарностью,

Заранее спасибо, Ник

Edit: Я забыл добавить, что код выполняется и компилируется с помощью xcode для iPhone OS 3.0. Вы, вероятно, получили это из тегов, но все же.

1 Ответ

20 голосов
/ 29 ноября 2009

-[UIImage imageNamed:] не принимает полный путь к файлу изображения - он принимает только имя файла, а затем ищет изображение с этим именем в основном комплекте приложения. Вот почему он возвращает ноль. -[UIImage imageWithContentsOfFile:], с другой стороны, ожидает полный или частичный путь к файлу. Основное различие между двумя конструкторами заключается в том, что imageNamed: кэширует изображение внутри (в частном кэше, специфичном для UIImage), тогда как imageWithContentsOfFile: не будет кэшировать изображение.

Sidenote: Нет, это не утечка памяти. Вы используете удобный конструктор, который в соответствии с правилами управления памятью для Какао должен возвращать автоматически выпущенный объект, владельцем которого вы не являетесь, если вы явно не оставите его в другом месте.

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