の原因となるので、物語はこのように書きます:)アレイブロックの列挙にUITableViewsの作成はクラッシュ
私はNSArrayの中で列挙オブジェクトをブロックし、動的にそれらのそれぞれについてUITableViewsを作成し、UIScrollViewの中でそれらを追加しようとしています。私は可読性と再利用のためにLighter View Controllers from www.objc.ioを使用しています。 dataSourceはUITableViewごとに個別に作成されます。問題は、私はスピードの懸念のために、弱い保持されているブロックの列挙内のオブジェクトとデータソースが実際に各テーブルの割り当てを解除されることを確認することができ、スタック上のポストから出た
-[NSObject(NSObject) doesNotRecognizeSelector:]
ですべての時間をクラッシュです。
私は__strongでArrayDataSourceを初期化しようとしましたが効果はありませんでした。
__strong ArrayDataSource *customdayTableDataSource = [[ArrayDataSource alloc] initWithConfigureCellBlock:configureCell cellIdentifier:DayTableCellIdentifier];
ブロックで何が間違っていますか?私に正しい方向を教えてもらえますか?
TableViewCellConfigureBlock configureCell = ^(id cell, id object) {
[cell configureForObject:object];
};
[NSArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
int tableHorizontalPosition = [[UIScreen mainScreen] bounds].size.width * idx;
int tableHeight = [[UIScreen mainScreen] bounds].size.height;
UITableView *table = [[UITableView alloc] initWithFrame:CGRectMake(tableHorizontalPosition, 0, [[UIScreen mainScreen] bounds].size.width, tableHeight) style:UITableViewStylePlain];
[table setDelegate:self];
ArrayDataSource *customDataSource = [[ArrayDataSource alloc] initWithConfigureCellBlock:configureCell cellIdentifier:MyCellIdentifier];
[customTableDataSource setOriginalData:[NSArray arrayWithObjects:@"1", @"2", @"3", @"4", nil]];
[table setDataSource:customTableDataSource];
[[self myUIScrollView] addSubview:table];
}];
rmaddyで指摘したようにiがブロックの範囲外初期化にNSArrayに各データソースを追加しました。これは私の問題を解決しました。人々はコメントで言ったように、彼らは限りtableviews、または多分より容易なソリューションとして、あなたのクラスではobjc_setAssociatedObject
を使用して強い参照を作成することです「生きている」となりますどこに
ブロック列挙体のオブジェクトが弱いという問題ではありません。テーブルビューの 'dataSource'プロパティは弱く、' ArrayDataSource'インスタンスはブロックの終わりを超えて生きていません。 – rmaddy
しかし、私は__strongで助けを借りてそれを初期化しようとしました。私はテーブルにそれをassaignするときに保持カウントが1つ上がるべきではない? – ha100
'__strong'を追加しても何もしません。既にデフォルトです。それを参照するためには、より長い範囲のものが必要です。テーブルにはデータソースの弱い参照が格納されているため、割り当て時に保持カウントは上がらない可能性があります。 – dan