2016-03-22 9 views
0

Ich habe 3 Funktionen in meinem Code. Der Code, den ich für die Verwaltung der Warteschlange für die Ausführung der Funktion getan habe.Wie wird die zweite Funktion aufgerufen, nachdem die erste Funktion ausgeführt wurde?

[self firstMethodWithOnComplete:^{ 
    [self SecongMethodWithOnComplete:^{ 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(CallThirdMethod) userInfo:nil repeats:NO]; 
      }); 
    }]; 
}]; 

erste und die zweite Funktion

- (void)firstMethodWithOnComplete:(void (^)(void))onComplete { 
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ 
    //processing here..... 

    [self CallFirstMethod]; 
    onComplete(); 
}); 
} 

- (void)SecongMethodWithOnComplete:(void (^)(void))onComplete { 
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ 
    //processing here..... 
    [self CallSecondMethod]; 
    onComplete(); 
}); 
} 

Das Problem ist, vermag ich nicht ihre Ausführung zu verwalten. Ich möchte die Ausführungsreihenfolge so, dass die zweite Funktion nur dann ausgeführt wird, wenn die erste beendet ist und die dritte, wenn die zweite ausgeführt wird. Bitte helfen Sie mir, dies zu lösen oder geben Sie geeignete Vorschläge.

+0

dispatch_async verwendet haben (dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)^{ dispatch_async (dispatch_get_main_queue()^{ NSLog (@ "dail Bild:% @", self.imageUrl); self.imgAppIcon.image = [UIImage imageWithData: [NSData dataWithContentsOfURL: [NSURL URLWithString: self.imageUrl]]]; }) ; }); – Birendra

+0

können Sie so versuchen – Birendra

+0

Lesen Sie diesen Artikel: http://stackoverflow.com/questions/7936570/objective-c-pass-block-as-parameter/27379471#27379471 Es zeigt, wie Sie eine Funktion aufrufen (Laden Daten von einer Website), die nach dem Beenden eine zweite Funktion aufruft. Es zeigt, wie eine Funktion als Parameter übergeben wird. Dies sollte Sie in die richtige Richtung weisen. –

Antwort

1

Sie können Versandgruppen für diese Art der Anforderung verwenden, Below i Beispielcode bin Entsendung, die ich

__block NSError *configError = nil; 
__block NSError *preferenceError = nil; 

// Create the dispatch group 
dispatch_group_t serviceGroup = dispatch_group_create(); 


dispatch_group_enter(serviceGroup); 
// Start the first async service 
dispatch_group_leave(serviceGroup); 


dispatch_group_enter(serviceGroup); 
// Start the second async service 
dispatch_group_leave(serviceGroup); 

dispatch_group_notify(serviceGroup,dispatch_get_main_queue(),^{ 
    //Update UI in this block of code 
}); 
+0

Was steht für self.configService und self.preferenceService? –

+0

es ist nur ein Beispiel func Block, den ich gemacht habe, ersetzen Sie ur Code in diesem – Mukesh

+0

Implementierung des obigen Codes geben Sie mir diesen Fehler ==> DB Fehler: Datenbank ist gesperrt –

Verwandte Themen