2011-08-29 137 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