0

我正在尝试从我调用的类方法中返回一个 bool 值,该类方法中有一个块。我收到错误,发送不兼容的块指针类型......我该如何解决这个问题?我只想知道我调用的类方法是否完成有或没有错误......

+ (BOOL)saveSelectedDepartmentsToParse:(NSMutableDictionary *)dictionary {

    NSArray *array = [dictionary allKeysForObject:@"YES"];
    NSMutableArray *trimmedArray = [[NSMutableArray alloc] init];

    for (NSString *string in array) {

        NSString *final = [string removeAllInvalidCharacters];
        [trimmedArray addObject:final];
    }

    NSLog(@"Array = %@", trimmedArray);

    PFInstallation *currentInstallation = [PFInstallation currentInstallation];

    [currentInstallation removeObjectForKey:@"channels"];
    [currentInstallation addObjectsFromArray:trimmedArray forKey:@"channels"];
    [currentInstallation saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {

        if (error == nil) {

            NSLog(@"Parse Save Succeeded");

            [self saveDepartmentsDictionary:dictionary];
        }
        else {

            NSLog(@"Parse Save Failed, %@", error.localizedDescription);
        }
    }];
}
4

2 回答 2

1

我只想知道我调用的类方法

这是对异步代码如何工作的误解。当您向 提供块时saveInBackgroundWithBlock:,该代码不会立即执行。它在稍后由 Parse 框架执行,如果块被定义为具有一个,则 Parse 执行此操作的任何部分都将获得返回值,但事实并非如此。您的块不会在您编写它的那一刻执行,因此您不能在编写它的那一刻返回任何内容。

您的代码没有调用该块,并且您无法从中将值返回给您的代码。这样做没有意义。如果您的代码的另一部分想要知道保存何时完成,您将需要使用返回值以外的其他机制,例如从您的块中调用方法、发布通知或键值观察。

于 2013-03-13T01:59:50.413 回答
1

从块关键字InBackground

[currentInstallation saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
    if (error == nil) {
        NSLog(@"Parse Save Succeeded");
        [self saveDepartmentsDictionary:dictionary];
    } else {
        NSLog(@"Parse Save Failed, %@", error.localizedDescription);
    }
}];

我猜这个块是异步调用的。

如果你想得到结果,你可以在这里等到块被执行,但是这样就saveInBackgroundWithBlock没有用了。

所以 NSNotification 可能会更好:

[currentInstallation saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
    if (error == nil) {
        NSLog(@"Parse Save Succeeded");
        [self saveDepartmentsDictionary:dictionary];
        [[NSNotificationCenter defaultCenter] postNotificationName:kNotificationParseSaveSucceeded object:nil];
    } else {
        NSLog(@"Parse Save Failed, %@", error.localizedDescription);
        [[NSNotificationCenter defaultCenter] postNotificationName:kNotificationParseSaveFailed object:nil];
    }
}];
于 2013-03-13T02:19:45.597 回答