İOS cihazımda küçük bir sqlitedb var. Bir kullanıcı bir butona bastığında, verileri sqlite'dan alıp kullanıcıya gösteriyorum.
Bu getirme kısmını bir arka planda yapmak istiyorum (UI ana iş parçacığını engellememek için). Bunu böyle yapıyorum -
[self performSelectorInBackground:@selector(getResultSetFromDB:) withObject:docids];
Getirme ve biraz işlemden sonra kullanıcı arayüzünü güncellemem gerekiyor. Ancak (iyi bir uygulama olarak) arka plan iş parçacıklarından UI güncellemesi yapmamalıyız. Bir ana selector
konuya böyle sesleniyorum -
[self performSelectorOnMainThread:@selector(showResults) withObject:nil waitUntilDone:NO];
Ancak uygulamam ilk adımda çöküyor. yani bir arka plan iş parçacığı başlatmak. Bu, iOS'ta arka plan iş parçacıklarını başlatmanın bir yolu değil mi?
GÜNCELLEME 1:[self performSelectorInBackground....
Bu yığın izini aldıktan sonra , ne olursa olsun hiçbir bilgi yok -
GÜNCELLEME 2: Hatta böyle bir arka plan iş parçacığı başlatmayı denedim -
[NSThread detachNewThreadSelector:@selector(getResultSetFromDB:) toTarget:self withObject:docids];
ama yine de aynı yığın izini alıyorum.
Açıklığa kavuşturmak için, bu işlemi ana iş parçacığı üzerinde gerçekleştirdiğimde her şey sorunsuz çalışıyor ...
GÜNCELLEME 3 Bu arka planda çalıştırmaya çalıştığım yöntem
- (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
korunduğundan emin olun .
docids
öyledir retain
. Ben bunu koyduk .h
olarak@property (nonatomic, retain) NSMutableArray *docids;
get
; bu sadece olmalıresultSetFromDB: