Ios 将块回调插入NSMutableDictionary

Ios 将块回调插入NSMutableDictionary,ios,objective-c,nsdictionary,objective-c-blocks,Ios,Objective C,Nsdictionary,Objective C Blocks,我想从web服务器获取照片的评论。服务器返回包含注释的数组。是否可以将块而不是注释数组附加到NSMutableDictionary? 我希望块返回注释并将其值插入字典 我的意思是有些人会这样想(但它会导致编译错误): 不,一个对象不能“变成”另一个对象。您要做的是让块在字典中插入结果数组,而不是“成为”结果数组。在注释中的讨论之后,您可能需要这样做 在块中为fetchCommentsForNode:success:执行内联操作-更新字典: NSMutableDictionary *propert

我想从web服务器获取照片的评论。服务器返回包含注释的数组。是否可以将块而不是注释数组附加到NSMutableDictionary? 我希望块返回注释并将其值插入字典

我的意思是有些人会这样想(但它会导致编译错误):


不,一个对象不能“变成”另一个对象。您要做的是让块在字典中插入结果数组,而不是“成为”结果数组。

在注释中的讨论之后,您可能需要这样做

在块中为
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];
你所要做的就是确保
VDPhoto
中的
@属性
你在
init
方法中保存的
属性
strong
,而不是
copy
,然后你可以查看字典,一旦调用
success
块,你就可以设置你的注释

编辑:

更好的选择是将
@属性(非原子,复制)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;
}];

你基本上是在问如何在字典里放一个块吗?它会产生什么编译错误?我想将一个块作为回调块附加到一个方法,然后我想将它添加到字典中。当回调块完成它的工作时,我想在字典中看到返回的值。不,我认为你不能这样做,你必须让回调在字典中设置一个值,块用于执行代码,而不是保存结果。你可以将块存储到字典中。不过,您必须存储[commentsBlock copy]。当然,还需要一些代码将块从字典中删除,并称之为有用的块。
@property(nonatomic,copy)NSArray*comments
我为什么要将其定义为
copy
@zontragon哈,我正在讨论是否将此链接放入我的答案中-不知道为什么我没有!请参见:)如果在离开定义块的范围后使用它们,则必须复制它们。对于属性,将属性声明为“copy”最容易做到这一点。“保留”通常会导致崩溃。
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;
}];