我試圖通過它們的URL加載圖像並將它們按照的順序存儲在NSMutableArray 中。如果我不關心按順序存儲圖像,我的當前代碼正常工作,但是它存儲的順序不是這樣。它目前根據異步請求完成的速度將圖像存儲在articleImage數組中。我試圖玩弄insertObject:AtIndex,但無法取得任何工作。爲了澄清,我試圖存儲圖像(以有序的方式)的NSMutableArray是articleImage。如何將我的異步url映像加載到NSMutableArray中?
這裏是我的viewDidLoad中的一些代碼:
dispatch_async(dispatch_get_main_queue(), ^{
if(articleInfoJSONArray.count > 0)
{
for(int i=0; i<articleInfoJSONArray.count; i++)
{
[issueID addObject:[[articleInfoJSONArray objectAtIndex:i] objectForKey:@"issueID"]];
[articleID addObject:[[articleInfoJSONArray objectAtIndex:i] objectForKey:@"articleID"]];
NSString *imageLink = [[articleInfoJSONArray objectAtIndex:i] objectForKey:@"articleImage"];
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
dispatch_async(queue, ^{
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:imageLink]];
UIImage *image = [UIImage imageWithData:data];
dispatch_async(dispatch_get_main_queue(), ^{
[articleImage addObject:image];
if(articleImage.count == articleInfoJSONArray.count)
[self imagesLoaded];
});
});
}
}
});
這裏是我的imagesLoaded:
- (void)imagesLoaded
{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];
ViewController * vc = [storyboard instantiateViewControllerWithIdentifier:@"MainView"];
[self presentViewController:vc animated:NO completion:nil];
}
不看代碼的話「異步」和「秩序「似乎相互排斥。 – trojanfoe
希望情況並非如此:( –
再一次,沒有看代碼,我可以想到2個解決方案:1.一個後臺線程按順序加載圖像2.將索引號與每個作業相關聯並使用它來存儲圖片在他們的陣列中,1更好,因爲它更簡單,並且可能運行得更快 – trojanfoe