Ich habe Situation, wo ich meine Array-Objekte mit EnumerateObjectsUsingBlock Iterieren, und ich muss auf eine Fertigstellung in der Iteration warten, dann sollte es weiteren Code ausführen, wie kann ich dies erreichen, oder wenn eine Alternative ich sollte Verwendung, unten ist mein CodeenumerateObjectsUsingBlock und Abschluss zusammen
[arrPendingQueue enumerateObjectsUsingBlock:^(PendingQueues *obj, NSUInteger idx, BOOL *stop) {
//Fetch static google map based on coordinates
[self generateMapImage:obj.postObj completion:^(UIImage *image) {
NSString *path = [NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES).firstObject stringByAppendingPathComponent:@"camera"];
NSString *resultPath = [path stringByAppendingPathComponent:[NSString stringWithFormat:@"map_%f.jpg",[[Constants getSystemDateInLocalTimeZone] timeIntervalSince1970]]];
[[NSFileManager defaultManager] createFileAtPath:resultPath contents:UIImageJPEGRepresentation(image, 1.0) attributes:nil];
postObj.imagepath = [@"camera" stringByAppendingPathComponent:[resultPath lastPathComponent]];
[DataManager saveObject:postObj];
}];
//After the completion I want to upload the data here to server
});
Grundsätzlich versuche ich, statisch google map zum Download von in Funktion koordiniere generateMapImage
und ich mag die Schleife bis zur Fertigstellung warten, genannt ..
Dafür habe ich versucht, zu verwenden, dispatch_semaphore_create
wie
[arrPendingQueue enumerateObjectsUsingBlock:^(PendingQueues *obj, NSUInteger idx, BOOL *stop) {
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
[self generateMapImage:obj.postObj completion:^(UIImage *image) {
dispatch_semaphore_signal(semaphore);
}];
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
});
Aber es funktioniert nicht, es wartet nicht, und führt den Code vor der Fertigstellung abgeschlossen.
Wie zu lösen, bitte helfen Sie.
Danke.
Verwenden Sie die benutzerdefinierte Unterklasse 'NSOperation' –
Möchten Sie in jedem Schritt auf den Abschluss einer einzelnen Operation warten oder möchten Sie auf den Abschluss aller Operationen warten? –
@ AminNegm-Awad Abschluss einer einzigen Operation in jedem Schritt. – iphonic