我在我的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