2013-07-08 195 views
0

如何從塊外部訪問[insertedItem objectForKey:@「id」]的值?訪問塊屬性

[itemTable insert:item completion:^(NSDictionary *insertedItem, NSError *error) { 
     if (error) { 
      NSLog(@"Error: %@", error); 
     } else { 
      NSLog(@"Item inserted, id: %@", [insertedItem objectForKey:@"id"]); 
     } 
    }]; 

回答

1

你不能。將塊視爲匿名方法。你能從外面訪問一個方法的局部變量嗎?顯然

[itemTable insert:item completion:^(NSDictionary *insertedItem, NSError *error) { 
    self.insertedItem = insertedItem; 
}]; 

,確保insertedItem是strong參考:

如果你想要號,您可以在另一個變量保存價值和訪問它。

+0

如果你在塊中引用自我,你是否需要對自我做一個弱引用? –

+2

@ZevEisenberg只有'self'也對塊有強烈的參考時,我們無法從這段代碼中判斷它是否存在。 – jrturton

+1

使用這種方法,你永遠不會知道塊何時被處理過(可能在3分鐘內在另一個線程上?),所以你需要添加一個委託或NSNotification來偵聽被改變的'self.insertedItem'。 –