Daten im Hintergrund-Thread hole ich die Daten aus meinem Tisch ohne Ausgabe Folders
wie dieseWie holen Für normale Instanz in MagicalRecord
+ (void)getCurrentFolderFileForParentFolderID:(NSString *)parentFolderID sortBy:(NSString *)sortBy asending:(BOOL)asending withCompletionHandler:(void(^)(id response,NSError *error))completionHandler {
NSPredicate *filter = [NSPredicate predicateWithFormat:@"parentfolderidlocal = %@", parentFolderID];
NSArray *folders = [Folders MR_findAllSortedBy:sortBy ascending:asending withPredicate:filter];
NSArray *files = [Files MR_findAllSortedBy:sortBy ascending:asending withPredicate:filter];
completionHandler(@{@"folders":folders,@"files":files},nil);
}
Es arbeitet superfeine bin holen, aber wenn ich versuche zu holen die Daten von Hintergrund ich ein seltsames Problem habe, habe ich folgende Möglichkeiten versucht, die Daten im Hintergrund Warteschlange immer gleiche Problem die ganze Zeit
Process One zu holen: aufrufen es in einer Absende-Warteschlange
dispatch_async(fileSystemBackGroundQueue(), ^{
[DataBaseManager getCurrentFolderFileForParentFolderID:parentFolderID sortBy:sortBy asending:asending withCompletionHandler:^(id response, NSError *error) {
dispatch_async(dispatch_get_main_queue(), ^(void){
completionHandler(response, error);
});
}];
});
wo fileSystemBackGroundQueue()
als
dispatch_queue_t fileSystemBackGroundQueue() {
static dispatch_once_t queueCreationGuard;
static dispatch_queue_t queue;
dispatch_once(&queueCreationGuard, ^{
queue = dispatch_queue_create("com.myappname.filesystem.backgroundQueue", DISPATCH_QUEUE_SERIAL);
});
return queue;
}
Prozess Zwei folgen: Mit lokalem Kontext für magischen Rekord
+ (void)getCurrentFolderFileForParentFolderID:(NSString *)parentFolderID sortBy:(NSString *)sortBy asending:(BOOL)asending withCompletionHandler:(void(^)(id response,NSError *error))completionHandler {
NSManagedObjectContext *localContext = [NSManagedObjectContext MR_context];
NSPredicate *filter = [NSPredicate predicateWithFormat:@"parentfolderidlocal = %@", parentFolderID];
NSArray *folders = [Folders MR_findAllSortedBy:sortBy ascending:asending withPredicate:filter inContext:localContext];
NSArray *files = [Files MR_findAllSortedBy:sortBy ascending:asending withPredicate:filter inContext:localContext];
completionHandler(@{@"folders":folders,@"files":files},nil);
}
oder
+ (void)getCurrentFolderFileForParentFolderID:(NSString *)parentFolderID sortBy:(NSString *)sortBy asending:(BOOL)asending withCompletionHandler:(void(^)(id response,NSError *error))completionHandler {
NSManagedObjectContext *localContext = [NSManagedObjectContext MR_context];
[localContext performBlock:^{
NSPredicate *filter = [NSPredicate predicateWithFormat:@"parentfolderidlocal = %@", parentFolderID];
NSArray *folders = [Folders MR_findAllSortedBy:sortBy ascending:asending withPredicate:filter inContext:localContext];
NSArray *files = [Files MR_findAllSortedBy:sortBy ascending:asending withPredicate:filter inContext:localContext];
dispatch_async(dispatch_get_main_queue(), ^(void){
completionHandler(@{@"folders":folders,@"files":files},nil);
});
}];
}
und Aufruf es in Absende-Warteschlange, wie oben oder mit aus Absendewarteschlange
In allen drei Fällen für die Hintergrund-Thread I das folgende Problem habe, während die Daten in einer Tabellenansicht Zelle für Zeile bei Index Pfad:
In normale Instanz es funktioniert gut, ich erhalte die folgende
aber für Hintergrund-Thread ich erhalte das Objekt aber keinen Wert (einige Male ich bin Wert bekommen obwohl)
Bitte kann jeder helfen. Ich stecke hier fest. Ich brauche hier die Versandwarteschlange. Ich habe nicht so viel Wissen über Hintergrund Threading/Versand. Bitte lassen Sie mich wissen, wenn ich hier etwas falsch mache.
hast du die ganze Frage gelesen? – souvickcse