悪いスタイルと見なされることを 2 つ実行しますが、理由があり、Cocoa ソリューションを受け入れています。それが何であるかはわかりません。
NSArray
a に対してタイプ セーフな が必要で、UIView
次にs のNSArray
配列に対してタイプ セーフな が必要UIView
です。の 2D 配列UIViews
。
UITableView
垂直テーブル ビュー内にネストされた水平テーブル ビューを持つカスタム double を実装したので、これが必要です。私は自分のカスタムViewsArray
をViews2DArray
、他のプログラマーが簡単に私の にコンテンツを与えるデータ構造として使用しますDoubleTableView
。それは延長したい十分な理由NSArray
ですか?
私が抱えている問題は、メソッドの機能をオーバーライドしたことです。
(NSArray *) initWithObjects:(id) firstObject ...
なので:
(ViewsArray *) initWithViews: (UIView *) firstView, ...
しかし、 my メソッドの戻り値は であり、 myNSArray
に他のメソッドが含まれていませんViewsArray
。これは、認識されていない選択された例外を意味します。ビューを含むNSArray
プロパティを作成することでこれを一時的に解決しましたが、コンテンツを.ViewsArray
DoubleTableView
元:
[[self.delegate content].arraysOfViews objectAtIndex:indexPath.section];
それ以外の
[[self.delegate content] objectAtIndex:indexPath.section];
数文字であることはわかっていますが、良いコードを書くために最善を尽くしています。
self
に戻り、、などのプロパティを追加するにはinitWithViews
どうすればよいですか? (キャスティング?) 私はこれについて間違っていると考えていますか (Java/typesafity で ...)? このようなデータ構造に最適なソリューションは何ですか?NSArray
greatestHeight
totalWidth
編集:
「スタイリッシュ」と思われる方法で問題を解決するために、次のことを行いました。
これは私のヘッダーです (これは NSObject であることに注意してください):
@interface ViewsArray : NSObject
@property int greatestHeight;
@property int greatestWidth;
@property int totalWidth;
- (ViewsArray *) initWithViews: (UIView *) firstView, ...;
- (UIView *) getViewAtIndex: (NSInteger) index;
- (NSUInteger) viewCount;
@end
これは私の実装です:
@interface ViewsArray ()
@property (retain, nonatomic) NSArray *views;
@end
つまり、プライベート NSArray を管理するだけです。きれいな参照を許可します。
今日私が学んだこと: いまいましいドキュメントを読んで、自分の言語を受け入れてください。このインスタンスが最後のものを示していない可能性があることはわかっていますが、より近いです;)