Ios 访问块属性

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: %@",

如何从块外部访问[insertedItem objectForKey:@“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已经在这方面进行了讨论。