2011-01-06 15 views
8

मैं कंसोल में त्रुटि संदेश निम्न है जब NSThread का उपयोग कर "मुख्य थ्रेड या वेब धागा के अलावा किसी अन्य धागे से वेब ताला प्राप्त करने के लिए कोशिश की। यह अब एक माध्यमिक धागा। क्रैश से UIKit बुला का एक परिणाम हो सकता है। .. "कैसे त्रुटि को हल करने के?

मैं अपने नमूना यहाँ कोड

- (void)viewDidLoad { 

    appDeleg = (NewAshley_MedisonAppDelegate *)[[UIApplication sharedApplication] delegate]; 
    [[self tblView1] setRowHeight:80.0]; 
    [super viewDidLoad]; 
    self.title = @"Under Ground"; 


    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; 
    [NSThread detachNewThreadSelector:@selector(CallParser) toTarget:self withObject:nil]; 

} 

-(void)CallParser { 


    Parsing *parsing = [[Parsing alloc] init]; 
    [parsing DownloadAndParseUnderground]; 

    [parsing release]; 
    [self Update_View]; 
    //[myIndicator stopAnimating]; 
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; 




} 
यहाँ

प्रस्तुत है" DownloadAndParseUnderground "आरएसएस फ़ीड से डेटा downloding की विधि और

-(void) Update_View{ 


    [self.tblView1 reloadData]; 
} 

क है एन Update_View विधि कहा जाता है tableView डाटा को फिर से लोड और cellForRowAtIndexPath में त्रुटि बनाने और कस्टम सेल

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 


    static NSString *CellIdentifier = @"Cell"; 

    CustomTableviewCell *cell = (CustomTableviewCell *) [tblView1 dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if (cell == nil) { 

     [[NSBundle mainBundle] loadNibNamed:@"customCell" 
             owner:self 
            options:nil]; 

     cell = objCustCell; 
     objCustCell = nil; 

    } 
+0

दोनों जवाब downvoted गया में जोड़ें, क्यों? – BoltClock

+1

उत्तर पढ़ना, ऐसा इसलिए है क्योंकि दोनों गलत हैं (या अयोग्य - 'आप सब के साथ क्या है ??!?)। – bbum

उत्तर

0

ठीक कृपया प्रदर्शित नहीं उचित समझाने क्यों आप विधि पार्स करने में धागा की आवश्यकता होती है? अपने कोड में यू ठीक से सूत्र में में मेज पुनः लोड विधि का उपयोग करें ....

क्योंकि

यू सूत्र में अपने को देखने के लिए किसी भी बात जो प्रासंगिक डाल सकते ...

यू केवल पृष्ठभूमि प्रक्रिया डाल सकते हैं इसमें पार्सिंग की तरह ... यदि आप पार्सिंग के बाद रीलोड टेबल चाहते हैं तो आप अपने कोड में कुछ फ्लैग वैल्यू का उपयोग कर सकते हैं और लोड टेबल को पार्स करने के बाद

-1

आप पृष्ठभूमि थ्रेड से किसी भी यूआई तत्वों तक नहीं पहुंच सकते हैं। आप निश्चित रूप से पृष्ठभूमि धागे पर विचार नहीं बना सकते हैं। "PerformSelectorOnMainThread" "detachNewThreadSelector" विधि के बजाय विधि का उपयोग करें।

सभी बेहतरीन।

3
  • यदि कोई दुर्घटना हो, तो बैकट्रैक है। कृपया इसे पोस्ट करें।

  • विधि नाम, छोटे अक्षरों के साथ शुरू camelCased हैं और अंडरस्कोर नहीं है। इन सम्मेलनों के बाद अन्य आईओएस प्रोग्रामर द्वारा आपके कोड को पढ़ने में आसान बना दिया जाएगा और इन सम्मेलनों को सीखने से अन्य आईओएस प्रोग्रामर के कोड को समझना आसान हो जाएगा।

आप प्रत्यक्ष या परोक्ष रूप पृष्ठभूमि धागे से मुख्य थ्रेड में तरीकों नहीं आह्वान कर सकते हैं। आपका दुर्घटना और अपने कोड दोनों संकेत मिलता है कि आप स्वतंत्र रूप से मुख्य थ्रेड प्रपत्र गैर मुख्य धागे के साथ बातचीत कर रहे हैं।

documentation on the use of threads in iOS applications काफी व्यापक है।

0

कोशिश परिवर्तन CallParser विधि

-(void)CallParser { 

    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 

    Parsing *parsing = [[Parsing alloc] init]; 
    [parsing DownloadAndParseUnderground]; 

    [self performSelectorOnMainThread:@selector(Update_View) 
          withObject:nil 
         waitUntilDone:NO]; 
    [parsing release]; 
    [pool release]; 
} 

को और ले जाने के

[UIApplication sharedApplication].networkActivityIndicatorVisible = NO; 

लाइन Update_View विधि के लिए

2

क्योंकि आप एक धागा है कि मुख्य थ्रेड नहीं है से अपने UIViewController लोड आपकी समस्या आना चाहिए । युक्तियाँ जब आप दृश्य लोड करने से पहले डेटा चार्ज करने का प्रयास करते हैं। यह व्यवस्था करने के लिए आप इस 1 करने की कोशिश कर सकते हैं।सिर्फ एक परम

-(void)pushViewController:(UIViewController*)theViewController{ 
[self.navigationController pushViewController:theViewController animated:YES];} 

2.Change अपने कोड (नीचे टिप्पणी की) के साथ अपने ViewController लोड करने के लिए एक विधि अपने अतुल्यकालिक लोड हो रहा है करने के लिए "PerformSelectorOnMainThread"

-(void)asyncLoadMyViewController 
{ 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
    MyViewController *myVC = [[myVC alloc] initWithNibName:@"myVC" bundle:nil ]; 
    [self performSelectorOnMainThread:@selector(pushViewController:) withObject:myVC waitUntilDone:YES]; 
    //  [self.navigationController pushViewController:wnVC animated:YES]; 
    [wnVC release]; 
    [pool release]; 
} 
संबंधित मुद्दे