Ios 访问块属性
如何从块外部访问[insertedItem objectForKey:@“id”]的值Ios 访问块属性,ios,objective-c,Ios,Objective C,如何从块外部访问[insertedItem objectForKey:@“id”]的值 [itemTable insert:item completion:^(NSDictionary *insertedItem, NSError *error) { if (error) { NSLog(@"Error: %@", error); } else { NSLog(@"Item inserted, id: %@",
[itemTable insert:item completion:^(NSDictionary *insertedItem, NSError *error) {
if (error) {
NSLog(@"Error: %@", error);
} else {
NSLog(@"Item inserted, id: %@", [insertedItem objectForKey:@"id"]);
}
}];
你不能。将块视为匿名方法。您能从外部访问方法的局部变量吗?没有 如果需要,可以将该值保存在另一个变量中并访问它:
[itemTable insert:item completion:^(NSDictionary *insertedItem, NSError *error) {
self.insertedItem = insertedItem;
}];
显然,确保insertedItem是一个强引用。如果你在块内引用self,你不需要对self进行弱引用吗?@ZevEisenberg只有当
self
也有对块的强引用时,我们才能从这个代码片段判断它是否有。使用这种方法,您永远不知道块是什么时候被处理的(可能在3分钟后在另一个线程上?),因此您需要添加一个委托或NSNotification来监听正在更改的self.insertedItem
。@RobvanderVeer好吧,既然这是一个完成块,我想OP已经在这方面进行了讨论。