我很努力地爲NSOperationQueue
獲取正確的東西。 我有兩個tableView
在viewController
,一個tableView
顯示完整的圖像和其他tableView
顯示一種畫廊視圖。 在我webView
我正在加載文件,並逐頁我正在呈現Images
出來..每個圖像我試圖做在NSOperation
對象和這個Operation
對象我正在添加到NSOperationQueue
。重新排列隊列時,NSOperation不會執行
- (void)convertPageToImage
{
ImageDetails *imageDetails = [[ImageDetails alloc] init];
// setting some Other required values to imageDetails
[self startImageConvertionForCurrentPageWithDetails:imageDetails];
}
- (void)startImageConvertionForCurrentPageWithDetails:(ImageDetails *)imageDetails
{
if (self.pendingOperations.conversionInProgress)
{
// Start downloading
ImageConverter *imageConverter = [[ImageConverter alloc] initWithImageDetails:imageDetails delegate:self];
imageConverter.delegate = self;
[self.pendingOperations.conversionInProgress addObject:imageConverter];
[self.pendingOperations.conversionQueue addOperation:imageConverter];
imageDetails = nil;
imageConverter = nil;
}
}
到目前爲止,每一件事情會很好,但是當我從圖庫中選擇TableView
縮略圖看到它,在衆目睽睽之下(即再次UITableView
),如果該圖像尚未呈現,我想這種形象所以我創建新的NSOperation
與ImageDetails
對象和重新排序NSOperationQueue
通過添加所選圖像Operation
首先和其他人。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if(self.currentSlide <= indexPath.row)
{
ImageDetails *imgDetails = [self convertSlideToImage1];
imgDetails.currentPage = indexPath.row;
imgDetails.showingPage = indexPath.row;
[self performSelector:@selector(reorderOperationQueue:) withObject:imgDetails afterDelay:0.0f];
}
}
我這是怎麼重新排序Queue
- (void)reorderOperationQueue :(ImageDetails *) imageDetails
{
[self.webView stopLoading];
[self.slideLoaderWebView stopLoading];
[self.pendingOperations.conversionQueue setSuspended:YES];
self.pendingOperations.conversionQueue = nil;
ImageConverter *imageConverter = [[ImageConverter alloc] initWithImageDetails:imageDetails delegate:self];
[self.pendingOperations.conversionQueue addOperation:imageConverter];
for(ImageConverter *imgConverter in self.pendingOperations.conversionInProgress)
{
if(![imgConverter isEqual:imageConverter])
{
if(![imgConverter isFinished])
[self.pendingOperations.conversionQueue addOperation:imgConverter];
}
}
[self.webView reload];
[self.slideLoaderWebView reload];
[self.pendingOperations.conversionInProgress addObject:imageConverter];
imageConverter = nil;
}
選定的圖像轉換成功,並顯示在衆目睽睽之下,但在這個過程中依次形象應該已經處理/轉換,是沒有得到處理/轉換。 混淆???讓我嘗試一個例子。說到這個時候應用程序已經轉換了5個圖像(19),我在圖庫視圖和選擇第16圖像比我創建NSOperation
到第16圖像和重新排序NSOpreationQueue
這樣一種方式,第16圖像操作將是第一次,然後添加其餘所有(NSOpreationQueue應該是像第16 img,第6 img,第7等等)。因此在第16張圖片加載但第6張圖片並非全部加載。 請給我一些線索。
你是對的ImageConverter是NSOperation的子類,它只是主要的方法實現和一些圖像渲染方法的實現。 就你的第一個建議而言,我並不是都在使用舊隊列。爲舊隊列分配nil並創建一個新隊列。所以我想不需要將Suspended設置爲YES。我真的很喜歡你的第二點,我會這樣。搭售後讓你知道。非常感謝您的快速回復。 – Suryakant
@SuryakantSharma我知道你沒有使用舊的隊列,但是你正在重新使用這些操作,即使你指定了nil,這些操作也會保留在具有掛起狀態的'conversionInProgress'中。因此,當你再次將它們添加到隊列中時,它們可能仍會被暫停。 – Merlevede
暫停狀態是爲隊列不操作。 – Suryakant