2014-04-26 49 views
2

我想從Web服務器獲取照片的評論。服務器返回包含註釋的數組。是否可以附加一個塊而不是註釋數組到NSMutableDictionary? 我希望塊返回評論並將其值插入到字典中。將塊回調插入到NSMutableDictionary

我的意思是有些人認爲這樣的(但它提供了編譯錯誤):

NSArray* (^commentsBlock)(id responseObject) = ^(id responseObject){ 
     return responseObject; 
}; 


[self fetchCommentsForNode:[fileInfo objectForKey:@"nid"] 
             success: commentsBlock]; 

      VDPhoto *photo = [VDPhoto photoWithProperties: 
           @{@"imageView": imageview, 
           @"title": [fileInfo objectForKey:@"title"], 
           @"comments" : commentsBlock, 
           }]; 

      [photos addObject:photo]; 
+0

你基本上是問如何把塊在字典中?它會產生什麼樣的編譯錯誤? – Rich

+0

我想附加一個塊作爲回調塊的方法,然後我想將它添加到字典。當回調塊完成時,我想查看字典中的返回值。 – zontragon

+1

不,我不認爲你可以這樣做,你必須讓回調在字典上設置一個值,塊是執行代碼,而不是保存結果。 – Rich

回答

1

繼你可能想要做這樣的事情的意見的討論...

做一些行內的塊fetchCommentsForNode:success: - 更新字典:

NSMutableDictionary *properties = [@{@"imageView": imageview, 
             @"title": [fileInfo objectForKey:@"title"]} mutableCopy]; 

[self fetchCommentsForNode:[fileInfo objectForKey:@"nid"] success:^(id responseObject){ 
     properties[@"comments"] = responseObject; 
     return responseObject; 
}]; 

VDPhoto *photo = [VDPhoto photoWithProperties:properties]; 

[photos addObject:photo]; 

所有您需要做的是確保@propertyVDPhoto你保存propertiesinit方法是strong,而不是copy然後你可以看看字典,你會有你的意見設置一旦success塊已被調用。

編輯:

一個更好的選擇是一個@property (nonatomic, copy) NSArray *comments屬性添加到VDPhoto,然後設置在fetchCommentsForNode:上,其結果:

VDPhoto *photo = [VDPhoto photoWithProperties:@{@"imageView": imageview, 
                @"title": [fileInfo objectForKey:@"title"]}]; 

[photos addObject:photo]; 

[self fetchCommentsForNode:[fileInfo objectForKey:@"nid"] success:^(id responseObject){ 
     photo.comments = responseObject; 
     return responseObject; 
}]; 
+0

'@property(nonatomic,copy)NSArray * comments'爲什麼我應該定義爲'copy' – zontragon

+0

@zontragon Ha,我在討論把這個鏈接放到我的答案中 - 不知道爲什麼我沒有!請參見[此答案](http://stackoverflow.com/a/8090312/849645):) – Rich

+0

如果在離開定義範圍後使用它們,則必須複製這些塊。對於屬性,通過將屬性聲明爲「複製」最容易完成。 「保留」往往會導致崩潰。 – gnasher729

0

沒有,一個對象不能「成爲」另一個對象。你想要做的是讓塊插入字典中的結果數組,而不是「變成」結果數組。

相關問題