2011-10-28 4 views
0

私は辞書の中のキーの値で配列に単語を構築しようとしています。しかし、UIImageViewを "コピー"することができないので、私が好きなように動作しません。NSMutableDictionaryにUIImageViewsが含まれています... NSMutableArrayに変更可能なコピーを追加しますか?代わりに?

辞書にある文字を辞書に追加すると、実際のオブジェクトではなくコピーが得られれば完璧です。同じ文字の複数のイメージを作成して辞書に追加したくない場合は、キー "s"または "a"で呼び出すことができなくなります。同じ文字を使用するには複数の配列が必要です当時。

どうすればよいですか?

//How I create the letters 
     char s = 's'; 
     NSString *key = [NSString stringWithFormat:@"%c", s]; 
     alphabetS = [[UIImageView alloc] init]]; 
     [alphabetS setImage:[UIImage imageNamed:@"s.png"]]; 
     [allTilesDictionary setObject:alphabetS forKey:key]; 
     [alphabetS release]; 


//How I use the imageviews from the dictionary 
    NSMutableArray *wordOne = [[NSMutableArray alloc] initWithObjects:[allTilesDictionary objectForKey:@"s"],[allTilesDictionary objectForKey:@"h"],[allTilesDictionary objectForKey:@"o"],[allTilesDictionary objectForKey:@"p"], nil]; 

EDIT:私の解決策。それは完全に動作します。

for (UIImageView *letters in wordOne) 
{ 

    newLetter = [[UIImageView alloc] init]; 
    newLetter.image = letters.image; 
    newLetter.userInteractionEnabled = YES; 

    //I can now either lay them out wherever I want on the view, or add them to a new array. 
} 
+0

なぜ画像ビューではなく画像を保存するのですか?画像は共有することができます。 –

+0

なぜコピーが必要ですか?考えてみてください。おそらくコピーを避けることができます。そうでない場合は、UIImageViewのカスタムサブクラスにNSCopyingプロトコルを実装する必要があります。それほど簡単ではないと思います。それについて読む[ここ](http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Protocols/NSCopying_Protocol/Reference/Reference.html) –

+0

私は完全な溶液。私は良い夜の睡眠をして、目を覚まし、シャワーでそれを考えました。私が思うように動作すれば私のソリューションを投稿し、人々は好奇心が強いです。私の解決策は、ダニエルが言っているようなものを使っています。 – Jason

答えて

0

あなたの元のコード、若干変更さ:

//How I create the letters 
     char s = 's'; 
     NSString *key = [NSString stringWithFormat:@"%c", s]; 
     [allTilesDictionary setObject:[UIImage imageNamed:@"s.png"] forKey:key]; 


//How I use the imageviews from the dictionary 
    NSMutableArray *wordOne = [[NSMutableArray alloc] initWithObjects:[allTilesDictionary objectForKey:@"s"],[allTilesDictionary objectForKey:@"h"],[allTilesDictionary objectForKey:@"o"],[allTilesDictionary objectForKey:@"p"], nil]; 

そのコードのご利用には、わずかに変更されていない:

for (UIImage *letters in wordOne) 
{ 

    newLetter = [[UIImageView alloc] init]; 
    newLetter.image = letters; 
    newLetter.userInteractionEnabled = YES; 

    //I can now either lay them out wherever I want on the view, or add them to a new array. 
} 

作成した不必要なUIImageViews。

0
for (UIImageView *letters in wordOne) 
{ 

    newLetter = [[UIImageView alloc] init]; 
    newLetter.image = letters.image; 
    newLetter.userInteractionEnabled = YES; 

    //I can now either lay them out wherever I want on the view, or add them to a new array. 
} 
+0

しかし、あなたは不必要にUIImageViewsを "文字"で作成しています。その代わりに画像を入れてください。 –

+0

ああ。先端に感謝します。 :) – Jason

関連する問題