4

現在、アプリで配布されている画像に依存している、既に書かれたコードがたくさんあります。これを変更して、その場で Web サイトから画像をダウンロードして、常に新しいバージョンをアップロード/承認/リリースする必要がないようにしたいと考えています。

コードには[UIImage imageNamed:@"MyImageName.jpg"]、いたるところに型参照があります。これらの画像を喜んでダウンロードできるコードのセクションを特定したので、適切な場所に画像を取得できれば、ネットワーク接続があればアプリは正常に動作し、その場で画像をダウンロードできます。ただし、既存のコードを変更せずに機能させるために、ダウンロードした画像データをどこに書き込むべきかわかりません。

関連する画像データを NSData オブジェクトに取得するコードがあるので、このデータをどこに書き込むかを知る必要がありますか?

    NSLog(@"ERROR - MISSING IMAGE: %@", imageName);
    NSData* theImage = [NSData dataWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://f6c.yourmapp.mobi/Images/%@", imageName]]];
    NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString* documentsDirectory = [paths objectAtIndex:0];
    NSString* localFilePath = [documentsDirectory stringByAppendingPathComponent:imageName];
    [theImage writeToFile:localFilePath atomically:YES];
    tempImage = [UIImage imageNamed:imageName];
    if (tempImage != nil)
    {
        [images addObject:tempImage];
        haveAddedImages = YES;
    }

ありがとう

4

3 に答える 3

6

アプリケーションバンドルから画像をロードします。実行時にこのフォルダに書き込むことはできません。代わりに、画像をDocumentsフォルダーに書き込み(でパスを取得できますNSDocumentDirectory)、を使用[UIImage imageWithContentsOfFile:]してそのような画像をロードします。

于 2012-04-16T12:33:21.387 に答える
1

アプリケーションのドキュメントフォルダにのみ画像を書き込むことができます。

- (NSURL *)applicationDocumentsDirectory
{
    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}

ただし、コード[UIImage imageNamed:@ "MyImageName.jpg"]は、アプリケーションバンドルから画像をロードします。データを書き込むことはできません。

したがって、画像をダウンロードして上記のドキュメントフォルダに保存し、必要に応じて画像名を使用してパスを再作成できます。

パスからロードするには、代わりに+(UIImage *)imageWithContentsOfFile:(NSString *)pathを使用します。

于 2012-04-16T12:33:43.600 に答える
0

画像をドキュメントディレクトリにダウンロードできます。次に、ドキュメントディレクトリから画像をロードします

これを達成するのに役立つかもしれないいくつかのリンクがあります。

http://www.iphonedevsdk.com/forum/iphone-sdk-development/79393-how-download-files-server.html

http://www.cocos2d-iphone.org/forum/topic/16121

Iphone:画像ビューでドキュメントディレクトリの画像を表示する方法は?

于 2012-04-16T12:34:36.037 に答える