2011-08-29 143 views
4

我需要从特定URL读取图像。从目标C中的本地文件夹读取图像

它在WWW中正常工作。但当指向本地文件夹的URL时它返回一个零。

// Works 
NSString *sampleData = @"http://blogs-images.forbes.com/ericsavitz/files/2011/05/apple-logo2.jpg"; 

// Returns nil 
NSString *sampleData = @"USER/user2/..."; 

注: 我改变了的NSString NSURL和创建的UIImage。

NSURL *url = [NSURL URLWithString: data]; 

UIImage *image = [UIImage imageWithData: [NSData dataWithContentsOfURL:url]]; 

回答

1

您正在提供文件URL的相对路径名。该相对路径名相对于正在运行的应用程序的当前工作目录进行解释,该目录不保证是特别的,因此几乎肯定不是你想要的。

您可以提供绝对路径 - 以'/'开头 - 或者将您的应用程序的当前工作目录设置为明确的内容,例如用户的Documents文件夹。

+0

我需要从iPhoneSimulator的文档目录中读取图像 – Shadowtech

+0

这将为您获取应用程序的Documents文件夹的绝对路径。它可以在模拟器和设备上运行:'[NSHomeDirectory()stringByAppendingPathComponent:@“Documents”]' –

+0

它的作品..我正在使用 'NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES); \t NSString * documentsDirectory = [路径objectAtIndex:0];' 感谢您简化我的代码.. – Shadowtech

1

你可能应该看看NSBundle类。 方法,如

- (NSURL *)URLForResource:(NSString *)name withExtension:(NSString *)extension subdirectory:(NSString *)subpath

- (NSString *)pathForResource:(NSString *)name ofType:(NSString *)extension

可能是你想要什么

0

首先,你无法读取你给出这样的路径文件:“用户/用户2/...“,该文件必须在您的应用程序包或应用程序的沙箱中。

其次,如果有一些文本需要在URL中进行编码,请检查您的路径字符串。尝试:

NSURL *url = [NSURL URLWithString:[data stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

而且,如果网址不为零,你也应该检查你的[NSData dataWithContentsOfURL:url];将返回零。如果是这样,这意味着您的URL不正确,因此该方法找不到您的文件。

P.S.,您正在拍摄您的图片创建代码,您应该在imageWithData:之前致电alloc

+1

Xuzhe,其实我是试图从路径中读取。我试过它与捆绑它工作得很好。 – Shadowtech

0

你应该做的事希望得到当地网址:

NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
NSString *pngFilePath = [NSString stringWithFormat:@"%@/%@", docDir, nameOfFile]; 

和finaly,载入图片:

UIImage *image = [UIImage imageWithContentsOfFile:pngFilePath]; 
+0

它工作正常。 我改用dataWithContentsOfUrl。 谢谢。 – Shadowtech

0

尝试这些替代

NSString *path = @"USER/user2/.../xxx.xxx"; 
NSFileManager *fileManager = [NSFileManager defaultManager]; 
BOOL isFileExist = [fileManager fileExistsAtPath:path]; 
UIImage *image; 
if (isFileExist) { 
    image = [[UIImage alloc] initWithContentsOfFile:path]; 
} 
else { 
    // do something.<br> 
} 
+0

郭,它的工作原理 – Shadowtech