2009-06-30 8 views
2

私はカスタムクラスのインスタンスを作成する際に、initが設定するのに役立つ値を渡しています。私はインスタンス化されたオブジェクトのプロパティにこの値を格納し、それに関連付けされるUIImageのファイル名を生成するために、値を使用したいobjective-c NSStringのNSIntegerとメソッド呼び出しに関する質問

- (id)initWithValue:(NSInteger *)initialValue; 

:私は実際のinitオーバーライドされたし、それを変更しました。

私の質問は、これをCocoa/Obj-Cでどのようにするのが最善かです。 NSIntegerは私のニーズにとって最適なパラメータですか、NSStringはより良いでしょうか? 別のデザインパターンがありますか?私は、この状況で役立つ創造的な方法すべてに精通していません。

@interface MyView : UIView { 
UIImage *image; 
NSInteger value; 

私は、パラメータとしてNSIntegerに固執するならば、私は簡単にを割り当てることができます。私のクラスのプロパティであると仮定します。しかし、その値から "image12.png"を生成する必要があります(NSInteger = 12と仮定)。 「画像」のようなもの+ initialValue +「。png」

NSString *myValue = @"image"; 
[myValue stringByAppendingString:[initialValue stringValue]]; //NSInteger may not respond to stringValue?!? 
[myValue stringByAppendingString:@".png"] 

のObj-Cの私の理解が故障した場所です:どの私は信じては冗長にとのObj-Cで表されます。このような気がするのは簡単だが、私はまだ混乱している。

ここで、initialValueが@ "12"の値を持つNSStringであったとしますか?次に、self.value = [initialValue integerValue];

と私は画像を複数のstringByAppendingString呼び出しでビルドすることができました。他の言語ではとてもシンプルなものは単なる退屈なようです。

このようなものを処理するにはどうすればよいですか?

答えて

9

あなたのinitメソッドはうまく見えます。整数値だけを扱うのであれば、NSStringやNSNumberではなくNSIntegerを使いたいと思っています。あなたが変更したいかもしれないものは、でなく、(NSInteger *)でなければなりません.NSIntegerはオブジェクトではありませんが、Objective-Cではintに似たプリミティブ型です。あなたのような、NSStringののstringWithFormat:セレクタを使用して、イメージ名構築することができます

:ただ、ティムが言及したものにNSIntegerを展開する

NSInteger myInteger = 12; 
NSString *imageString = [NSString stringWithFormat:@"image%d.png", myInteger];
2

は実際にちょうどの#defineです。 32ビットアーキテクチャでは、それはintと同等で、64ビットアーキテクチャでは長いです。

整数をオブジェクトとして扱う必要がある場合(たとえばNSDictionaryに入れる場合)、numberWithInteger:を使用してNSNumberのインスタンスにラップできます。

希望に役立ちます!

+0

NSNumberにNSIntegerをラップするのは良い点です! – Tim

+0

NSIntegerが10.5で登場したので、実際にはnumberWithInteger:メソッドがあります。NSUserDefaultsのような場所にも同様のメソッドがあります。 –

+0

ありがとうMarc - 私はポストを更新しました –

0

心に留めておくべきもう一つの事はいえ、末尾のようなものを扱うどちらも、あなたがパスを扱っているとき、NSStringのはあなたにstringByAppendingPathExtension:stringByAppendingPathComponent:を与えるということですが、あなただけのstringByAppendingString:を使用した場合よりも優れスラッシュ。

このオブジェクトが何をしてどのような種類のイメージがロードされているかについてもう少し詳しく説明すると、番号を渡す代わりにファイル名を作成するより良い方法を考えることができます。 。

+0

私はバンドルからイメージを引っ張っているので、この場合はパス名を心配する必要はないと思っています...しかし、今はそのパスメソッドがある理由を理解しています。私は文字列としてパス名を書き出すのがなぜそれほど望ましくないのか不思議に思っていました。面白い。どうも! – Meltemi

関連する問題