so die Geschichte geht :)Erstellen UITableViews in Feldblock Aufzählung führt zum Absturz
Ich versuche enumerate Objekte in einem NSArray zu blockieren und dynamisch UITableViews für jeden von ihnen erstellen und fügen Sie sie in UIScrollView. Ich benutze Lighter View Controllers from www.objc.io aus Gründen der Lesbarkeit und Wiederverwendbarkeit. Die DataSource wird für jedes UITableView separat erstellt. das Problem ist, ich mit dem ganzen Zeit abstürze
-[NSObject(NSObject) doesNotRecognizeSelector:]
fand ich von Beiträgen auf dem Stapel aus, die schwach in Block Aufzählung Objekte werden für die Geschwindigkeit betrifft beibehalten und kann bestätigen, dass die Datenquelle tatsächlich für jede Tabelle freigegeben wird.
ich sogar versucht, ArrayDataSource mit __strong aber ohne Wirkung init.
__strong ArrayDataSource *customdayTableDataSource = [[ArrayDataSource alloc] initWithConfigureCellBlock:configureCell cellIdentifier:DayTableCellIdentifier];
was mache ich falsch im block? Kannst du mir bitte die richtige Richtung zeigen?
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];
}];
wie erwähnt mit rmaddy hinzugefügt ich jede Datenquelle zu einem NSArray aus dem Umfang des Blocks initialisiert. Das hat mein Problem gelöst. danke
Das Problem besteht nicht darin, dass Objekte in der Blockaufzählung schwach sind. Die 'dataSource'-Eigenschaft der Tabellenansicht ist schwach und Ihre' ArrayDataSource'-Instanzen leben nicht über das Ende des Blocks hinaus. – rmaddy
aber wie ich sagte, ich versuchte es mit __strong ohne Hilfe zu starten. Und sollte die Anzahl der behaltenen nicht um eins steigen, wenn ich sie auf den Tisch setze? – ha100
Das Hinzufügen von '__strong' macht dort nichts, es ist bereits der Standard. Sie benötigen etwas mit einem größeren Umfang, um einen Verweis darauf zu halten. Die Tabelle enthält eine schwache Referenz auf ihre Datenquelle, so dass die Anzahl der Retouren bei der Zuweisung nicht erhöht wird. – dan