0

这里有问题的工作流程如下:

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

-- 这里需要对 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。

4

2 回答 2

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
        }
    }];
}

在您的视图控制器中:

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

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

于 2013-07-01T20:48:08.153 回答
0

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

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

它相当古老且非常基本,但应该为您提供您想要做的事情所需的确切信息。

于 2013-07-01T19:34:38.607 回答