Имам тази част от кода:
- (void) resotreEntitySelectionForHistoryObject:(CoreDataHistoryObject *)historyObject {
OutlineViewNode *(^__block find)(OutlineViewNode *, NSString *) = ^OutlineViewNode *(OutlineViewNode *node, NSString *title) {
if ([node.title isEqualToString:title]) {
return node;
}
for (OutlineViewNode *child in node.childs) {
OutlineViewNode *result = find(child, title);
if (result) {
return result;
}
}
return nil;
};
OutlineViewNode *node = find(self.rootNode, historyObject.name);
if (node) {
[self.dataSourceList selectRowIndexes:[NSIndexSet indexSetWithIndex:[self.dataSourceList rowForItem:node]] byExtendingSelection:NO];
}
}
И получавам това предупреждение на компилатора:
- CoreDataUtility/CoreDataUtil/MFLMainWindowController.m:230:39: Силното прихващане на „find“ в този блок вероятно ще доведе до цикъл на запазване *
Той е на този ред "OutlineViewNode *result = find(child, title);"
Знам решение просто да създам метод вместо блок. Но сега това ме накара да се замисля как можете да върнете стойност от блок.
За справка можете да видите пълния изходен код тук:
https://github.com/yepher/CoreDataUtility/blob/master/CoreDataUtil/MFLMainWindowController.m#L224