2011-08-29 149 views
4

特定のURLから画像を読み取る必要があります。Objective Cのローカルフォルダから画像を読み取る

WWWでうまく動作します。 URLがローカルフォルダを指しているときにはnilを返します。

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

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

注: は私がNSURLにNSStringのを変更し、UIImageを作成しています。

NSURL *url = [NSURL URLWithString: data]; 

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

答えて

1

ファイルURLの相対パス名を指定しています。その相対パス名は、実行中のアプリケーションの現在の作業ディレクトリとの相対的な意味で解釈されます。特に何も保証されていないため、ほとんどあなたが望むものではありません。

「/」で始まる絶対パスを指定することも、アプリの現在の作業ディレクトリを明示的に設定することもできます(ユーザーのドキュメントフォルダなど)。

+0

私はiPhoneSimulatorのDocuments Directoryから画像を読む必要があります – Shadowtech

+0

これはあなたのアプリケーションのDocumentsフォルダへの絶対パスを取得します。シミュレータとデバイスの両方で動作します: '[NSHomeDirectory()stringByAppendingPathComponent:@" Documents "]' –

+0

その作品.. 私は使用していました 'NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory、NSUserDomainMask、YES); \t NSString * documentsDirectory = [paths objectAtIndex:0]; ' 私のコードを簡素化してくれてありがとう.. – Shadowtech

1

おそらくNSBundleクラスを調べる必要があります。 「USER/user2の:

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

または

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

よう 方法は、あなたがすべての

0

まず何をしたいおそらく、あなたが与えられたようなパスからファイルを読み込むことができません/ ... "の場合、ファイルはアプリケーションバンドルまたはアプリケーションのサンドボックスになければなりません。

次に、URLにエンコードする必要があるテキストがあるかどうかを確認します。試してみてください:

また

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

、URLがnilでない場合は、あなたの[NSData dataWithContentsOfURL:url];はnilを返している場合、あなたもチェックする必要があります。その場合は、URLが正しくないため、メソッドがファイルを見つけることができないことを意味します。

P.S.画像作成コードを誤って入力しています。allocimageWithData:の前に呼び出す必要があります。

+1

Xuzhe、実際に私がしたしてみてくださいパスから読み込もうとしています。バンドルで試してみましたが、うまくいきました。 – Shadowtech

0

あなたはローカルURLを取得するような何かを行う必要があります:あなたのイメージをロードし、

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

関連する問題