Tôi có một sqlitedb nhỏ trong thiết bị iOS của mình. Khi người dùng nhấn một nút, tôi lấy dữ liệu từ sqlite và hiển thị cho người dùng.
Phần tìm nạp này tôi muốn thực hiện trong một chuỗi nền (để không chặn chuỗi chính của giao diện người dùng). Tôi làm điều này như vậy -
[self performSelectorInBackground:@selector(getResultSetFromDB:) withObject:docids];
Sau khi tìm nạp và xử lý một chút, tôi cần cập nhật giao diện người dùng. Nhưng vì (như một phương pháp hay), chúng ta không nên thực hiện cập nhật giao diện người dùng từ các luồng nền. Tôi gọi một bảo trì selector
như vậy -
[self performSelectorOnMainThread:@selector(showResults) withObject:nil waitUntilDone:NO];
Nhưng ứng dụng của tôi gặp sự cố trong bước đầu tiên. tức là bắt đầu một luồng nền. Đây không phải là cách để bắt đầu chuỗi nền trong iOS?
CẬP NHẬT 1: Sau khi [self performSelectorInBackground....
tôi nhận được stacktrace này, không có thông tin gì -
CẬP NHẬT 2: Tôi thậm chí đã thử bắt đầu một chuỗi nền như vậy -
[NSThread detachNewThreadSelector:@selector(getResultSetFromDB:) toTarget:self withObject:docids];
nhưng tôi vẫn nhận được stacktrace tương tự.
Để tôi làm rõ, khi tôi thực hiện thao tác này trên luồng chính, mọi thứ chạy trơn tru ...
CẬP NHẬT 3 Đây là phương pháp tôi đang cố gắng chạy từ nền
- (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;
}
docids
được giữ lại.
docids
đang retain
. Tôi đã đặt nó trong .h
như@property (nonatomic, retain) NSMutableArray *docids;
get
; điều đó chỉ nên như vậyresultSetFromDB: