2009-11-29 71 views
4

我似乎无法加载图像,但我确定它在我指定的路径。UIImage没有被加载,但有文件

这里是一个尝试加载图像的代码:

- (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 

我对此没有任何线索为什么它找不到该文件。一个功能看来,其他没有,他们似乎在同一目录看...

任何帮助,不胜感激,提前

感谢, 尼克

编辑: 我忘了补充说明代码是由xcode为iPhone OS 3.0执行和编译的。你可能从标签中得到了这些,但仍然可以。

回答

20

-[UIImage imageNamed:]不接受图像文件的完整路径 - 它只接受文件名,然后在应用程序的主包中查找具有该文件名的图像。这就是为什么它返回零。另一方面,-[UIImage imageWithContentsOfFile:]需要文件的完整或部分路径。这两个构造函数的主要区别在于imageNamed:在内部缓存图像(在UIImage专用缓存中),而imageWithContentsOfFile:不会缓存图像。

旁注:不,这不是内存泄漏。您正在使用一种便利的构造函数,根据Cocoa的内存管理规则,应该返回一个自动释放的对象,除非您明确地将其保留在别处,否则您将不会拥有它。

+0

忘了谢谢。很好的解释。 :) – Nick 2009-11-29 11:37:19

+1

值得一提的是,这只是帮助我找到了我遇到的问题。我只是用文件名加载图像,但某些图像没有显示,并且其内存地址设置为0. 但捆绑的东西让我思考,所以我选择了我的资产文件夹中的图像并打开文件检查器面板。果然,xcode决定不检查我的几张图片的目标会员资格。 – Heckman 2012-07-26 14:49:56

+0

谢谢赫克曼,果然,我刚刚遇到了同样的问题,而且这也为我做了诡计。 – Ted 2014-01-22 16:03:56

相关问题