1

これはおそらくばかげた質問だと思いますが、ほとんどのゲーム データを plist に保存しています。これには、ゲーム内で使用される画像への参照を含めたいと思います。「サポート ファイル」と同じ階層レベルです。3 つの別々のフォルダーにさまざまな種類の画像を保存しています。たとえば、1 つのフォルダーは imageclue と呼ばれます。どうすればパスを plist に保存できますか? plist にパスを文字列 - filename.jpg として保存することはできないため、行き詰まっています。ファイルのパスを取得しようとしましたが、ログアウトすると.

うまく説明できていない場合は申し訳ありませんが、事前に助けてくれてありがとう:)

編集**

プログラムに plist ファイルを追加しましたが、画像は定数であるため、プログラムで追加したくありません。以下のスクリーンショットは、filename.jpg の代わりにチュートリアルを示しています (画像が保存されているため、機能しないため)ファイル内)どのパス名を文字列として使用するのか疑問に思いました。

ここに画像の説明を入力

画像は appcoda.com のチュートリアルからのものです - サムネイルが画像パスファイルであると書かれています。左側の画像が保存されている場所を見ると、プログラム ファイルと一緒に保存されています。私の画像はそこのフォルダーにあるので、画像ファイルの plist に何を入力すればよいか混乱しています。

これで私の言いたいことが明確になるといいのですが、申し訳ありません:)

4

3 に答える 3

0

こうやって、

NSDictionary *imagePaths = @{@"image 1": [NSHomeDirectory() stringByAppendingPathComponent:@"image 1"]};
[self writeToPlist:imagePaths];

- (void)writeToPlist:imagePaths:(id)plist{
  NSError *error;
  NSData *data = [NSPropertyListSerialization dataWithPropertyList:plist format:kCFPropertyListXMLFormat_v1_0 options:0 error:&error];
  if(error){
    NSLog(@"Could not write to file");
    return;
  }
  [data writeToFile:[self plistPath] atomically:YES];
}

同様に、ロードはこのように簡単です。

[self loadImagePathForImageNamed:@"image 1"];
- (NSString*)loadImagePathForImageNamed:(NSString*)imageName{

}


- (NSString*)loadImagePathForImageNamed:(NSString*)imageName{
    NSData *data = [NSData dataWithContentsOfFile:[self plistPath]];
  NSString *error;
  NSPropertyListFormat format;
  NSDictionary *dictionary = [NSPropertyListSerialization propertyListFromData:data mutabilityOption:NSPropertyListImmutable format:&format errorDescription:&error];
  if(error){
    NSLog(@"Could not open plist %@", error);
    return nil;
  }
  return dictionary[imageName];
}

ファイルが存在しない場合は、新しいファイルを作成してエラーを処理する必要がある場合があります。それ以外の場合は、これでうまくいくはずです。

于 2013-04-25T19:33:10.860 に答える
0

パスを正しい方法で保存しています。画像がアプリケーションバンドルにある場合は、拡張子を付けて画像のファイル名を plist に保存する必要があります。詳細な参照のために、plist で「item1」、「item2」の代わりにキー名を定義できます。

実際の質問に来て、plistから画像にアクセスする方法

ステップ 1 :recipes.plistアプリケーション バンドルから読み取る

NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"recipes" ofType:@"plist"];
NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:bundlePath];

ステップ2:ロードしたい画像/サムネイルの名前を取得します

ステップ 3: 名前から画像を返す次の関数をコントローラーで定義します。

- (UIImage *)getImageWithName:(NSString *)imageFileName
{
    NSString *ext = [imageFileName pathExtension];
    NSString *imagePath = [[NSBundle mainBundle] pathForResource:[imageFileName stringByDeletingPathExtension] ofType:ext];
    return [UIImage imageWithContentsOfFile:imagePath];
}

使い方

キー「Item2」でイメージをロードし、次のコードを記述したいとします。

NSString *imageFileName = [[dict objectForKey:@"Thumbnail"] valueForKey:@"Item2"];
UIImage *item2Image = [self getImageWithName:imageFileName];

「アイテム6」の場合

NSString *imageFileName1 = [[dict objectForKey:@"Thumbnail"] valueForKey:@"Item6"];
UIImage *item6Image = [self getImageWithName:imageFileName1];
于 2013-04-25T20:07:06.810 に答える