我正在开发一个从服务器检索信息的小型iOs应用程序,我找到了非常有用的NSURLSessionDataTask。首先,我使用了@property (nonatomic, strong) NSMutableArray *objectArray;
,我在我的方法中调用了它:
- (void) createObjectsArrayFromUrl: (NSString *) url {
NSURL *URL = [NSURL URLWithString:url];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
completionHandler:
^(NSData *data, NSURLResponse *response, NSError *error) {
if(error) {
//error handling
}
dispatch_async(dispatch_get_main_queue(), ^{
NSMutableDictionary *jsonDataDictionary = [objectModel getJsonData];
self.objectArray = [objectModel arrayFromDictionary:jsonDataDictionary];
[[self collectionView] reloadData];
});
}];
[task resume];
}
一切顺利。现在我想为更多数组创建一个通用方法,我想通过将数组传递给方法并在里面更新它来做到这一点,如下所示:
- (void) createObjectsArrayFromUrl: (NSString *) url inArray: (NSMutableArray *) objectArray{
NSURL *URL = [NSURL URLWithString:url];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
completionHandler:
^(NSData *data, NSURLResponse *response, NSError *error) {
if(error) {
//error handling
}
dispatch_async(dispatch_get_main_queue(), ^{
NSMutableDictionary *jsonDataDictionary = [objectModel getJsonData];
objectArray = [objectModel arrayFromDictionary:jsonDataDictionary];
[[self collectionView] reloadData];
});
}];
[task resume];
}
但它给了我以下行标题中的错误:objectArray = [objectModel arrayFromDictionary:jsonDataDictionary];
,我不知道如何继续。所以我的想法是,不是像以前那样为我拥有的每个数组创建一个方法,而是希望将数组作为变量传递并在方法中更新它。怎么做到这一点?谢谢。
代替
objectArray = [objectModel arrayFromDictionary:jsonDataDictionary];
尝试
[objecyArray removeAllObjects];
[objectArray addObjectsFromArray:[objectModel arrayFromDictionary:jsonDataDictionary]];
这是因为进入的变量在它前面没有__block
,因此允许它在块中使用,这仅适用于局部变量而不是参数。我相信__block
在引擎盖下的内容允许在块内引用。
如果你想在块中访问变量,那么你应该像__block NSArray *arr;
一样将它分配为块。然后你可以在完成处理程序中以块的方式访问该变量。
在您的代码中,您可以在方法体的开头添加一行,如,
__block NSArray *arr = objectArray;
然后在块中使用这个arr
,
arr = [objectModel arrayFromDictionary:jsonDataDictionary];
希望这会有所帮助:)