मेरे पास अपने iOS डिवाइस में एक छोटा सा sqlitedb है। जब कोई उपयोगकर्ता एक बटन दबाता है, तो मैं डेटा को sqlite से प्राप्त करता हूं और इसे उपयोगकर्ता को दिखाता हूं।
यह लाने वाला हिस्सा मैं इसे एक बैकग्राउंड थ्रेड (UI मुख्य थ्रेड को ब्लॉक नहीं करने के लिए) करना चाहता हूं। मैं ऐसा करता हूं -
[self performSelectorInBackground:@selector(getResultSetFromDB:) withObject:docids];
लाने और थोड़ी सी प्रोसेसिंग के बाद, मुझे UI अपडेट करना होगा। लेकिन चूंकि (एक अच्छे अभ्यास के रूप में) हमें बैकग्राउंड थ्रेड्स से यूआई अपडेशन नहीं करना चाहिए। मैं 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;
}
docids
को बरकरार रखा गया है।
docids
कर रहे हैं retain
। मैंने इसे .h
@property (nonatomic, retain) NSMutableArray *docids;
get
; बस यही होना चाहिएresultSetFromDB: