我在我的iOS設備中有一個小的sqlitedb。當用戶按下按鈕時,我從sqlite &中獲取數據將其顯示給用戶。iOS開始後臺線程
這個抓取部分我想在後臺線程中做(不阻塞UI主線程)。我這樣做,像這樣 -
[self performSelectorInBackground:@selector(getResultSetFromDB:) withObject:docids];
的獲取&後處理的一點點,我需要更新UI。但是,由於(作爲一種好的做法),我們不應該從後臺線程執行UI更新。我在mainthread叫selector
像這樣 -
[self performSelectorOnMainThread:@selector(showResults) withObject:nil waitUntilDone:NO];
但我的應用程序中的第一步崩潰。即開始後臺線程。這不是在iOS中啓動後臺線程的方法嗎?
更新1:[self performSelectorInBackground....
後,我得到這個堆棧跟蹤,沒有任何信息含量都沒有 -
更新2:我甚至嘗試,啓動一個後臺線程像這樣 - [NSThread detachNewThreadSelector:@selector(getResultSetFromDB:) toTarget:self withObject:docids];
但仍然我得到相同的堆棧跟蹤。
只是讓我澄清一下,當我在主線程都執行此操作運行流暢...
更新3這是我想從後臺
- (void)getResultSetFromDB:(NSMutableArray *)toProceessDocids
{
SpotMain *mirror = [[SpotMain alloc] init];
NSMutableArray *filteredDocids = toProceessDocids;
if(![gMediaBucket isEqualToString:@""])
filteredDocids = [mirror FetchDocIdsForMediaBucketWithDocID:filteredDocids mBucket:gMediaBucket numRes:-1];
if(![gMediaType isEqualToString:@""])
filteredDocids = [mirror FetchDocIdsForMediaType:filteredDocids mediaType:gMediaType numRes:-1];
if(![gPlatform isEqualToString:@""])
filteredDocids = [mirror FetchDocIdsForPlatformID:filteredDocids platformId:@"1" numRes:-1];
self.resultSet = [mirror FetchObjectFromDocid:filteredDocids];
[filteredDocids release];
[mirror release];
[self performSelectorOnMainThread:@selector(showResults) withObject:nil waitUntilDone:NO];
return;
}
什麼錯誤/崩潰日誌,你得到什麼? – jtbandes
請參閱我的更新... –
您能否在背景中顯示您所調用的方法?並確保對象'docids'保留。 – Rog