模型完成任务后创建回调

时间:2013-07-01 19:30:55

标签: ios objective-c ios5 model callback

此处讨论的工作流程如下:

用户点击创建游戏,调用游戏模型来创建游戏。

- 这里需要做的是对View Controller进行某种形式的回调以确认游戏是否已创建,以便可以将新的VC推送到屏幕上?实现这一目标的最佳方法是什么。

向用户显示提示,决定如下创建游戏:

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
    NSLog(@"button %i",buttonIndex);
    if (buttonIndex == 0) {
        // Cancel button pressed we will clear the gameNewOpponentUser to be clean
        self.gameNewOpponentuser = nil;
    } else {
        // Start Game button pressed
        [MESGameModel createNewGameWithUser:[PFUser currentUser] against:self.gameNewOpponentuser];
    }
}

然后游戏模型用Parse创建一个游戏,如下所示:

        PFObject *newGame = [PFObject objectWithClassName:@"Game"];
        [newGame setObject:[PFUser currentUser] forKey:kMESGameUser1];
        [newGame setObject:user2 forKey:kMESGameUser2];
        [newGame saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
            if (succeeded) {

            }
        }];

正如您所看到的,我已经成功了,我可以用来确认它是否已正确创建。但是,如何将从模型中创建的VC反馈给VC。

2 个答案:

答案 0 :(得分:0)

最好的方法是使用协议/委托系统。

点击此链接:http://iosdevelopertips.com/objective-c/the-basics-of-protocols-and-delegates.html

这是相当古老和非常基本的,但应该准确地提供你做你想做的事情所需的信息。

答案 1 :(得分:0)

使用完成块。

在你的模型中为你的游戏创建方法添加一个完成处理程序:

-(void) startNewGameWithCompletionHandler: (void(^)()) handler {
    PFObject *newGame = [PFObject objectWithClassName:@"Game"];
    [newGame setObject:[PFUser currentUser] forKey:kMESGameUser1];
    [newGame setObject:user2 forKey:kMESGameUser2];
    [newGame saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
        if (succeeded) {
            if (handler) handler(); //execute the code-block provided by the caller
        }
    }];
}

在你的viewController中:

[modelObject startNewGameWithCompletionHandler: ^{
  //push some vc here or whatever....
}];

当然你也可以为块定义一些参数(例如传递成功变量或你可能需要的任何其他东西),或者你可能想要进行一些错误检查/处理。