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 tìm nạp dữ liệu từ sqlite & hiển thị nó cho người dùng.iOS bắt đầu Chủ đề nền
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 luồng 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 lấy & một chút xử lý, tôi cần phải cập nhật giao diện người dùng. Nhưng vì (như là một thực hành tốt), chúng ta không nên thực hiện cập nhật UI từ các chủ đề nền. Tôi gọi một selector
trên mainthread như vậy -
[self performSelectorOnMainThread:@selector(showResults) withObject:nil waitUntilDone:NO];
Nhưng App của tôi bị treo trong bước đầu tiên. tức là bắt đầu một chuỗi nền. Đây có phải là cách để bắt đầu chuỗi nền trong iOS không?
UPDATE 1: Sau [self performSelectorInBackground....
tôi nhận được stacktrace này, không có thông tin gì vậy bao giờ -
UPDATE 2: Tôi thậm chí đã cố gắng, bắt đầu một sợi nền như vậy - [NSThread detachNewThreadSelector:@selector(getResultSetFromDB:) toTarget:self withObject:docids];
nhưng Tôi vẫn nhận được cùng một stacktrace.
Chỉ cần để tôi làm rõ, khi tôi thực hiện thao tác này trên chính chủ đề tất cả 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;
}
gì lỗi/vụ tai nạn log nào bạn nhận được? – jtbandes
Vui lòng xem nội dung cập nhật của tôi ... –
Bạn có thể vui lòng hiển thị phương pháp bạn đang gọi trong nền không? Và đảm bảo đối tượng 'docids' được giữ lại. – Rog