2

我一直在努力解决这个问题一段时间,所以任何帮助将不胜感激。

情况如下:我的应用程序有一个UIViewController名为InitialViewController. 此视图控制器有一个 UIButton,当按下该按钮时,它会创建一个NSObject名为MyEngine. 像这样的东西:

@interface InitialViewController : UIViewController <MyEngineDelegate>
...
@end

@implementation InitialViewController
...
-(IBAction)pressedButton:(id)sender {
    MyEngine *engine = [[MyEngine alloc] init];
    [engine start];
}

在里面start,我以模态方式展示了一个 ViewController ( ConflictViewController) 来获得用户的选择:

@interface MyEngine : NSObject <ConflictViewControllerDelegate>
...
-(void) start;
@end

@implementation MyEngine
...
-(void) start {
        ConflictViewcontroller *cvc = [[ConflictViewController alloc] initWithNibName:@"ConflictViewController" bundle:nil];
        cvc.modalPresentationStyle = UIModalPresentationFormSheet;
        cvc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
        cvc.delegate = self;
        UIWindow *window = [(MyAppDelegate *) [[UIApplication sharedApplication] delegate] window];
        [[window rootViewController] presentModalViewController:cvc animated:YES];
}
@end

ConflictViewController真的很简单。它只是等待用户做出决定,当用户按下按钮时,它会将消息发送到delegate,然后自行关闭。

-(IBAction)didSelectConflict:(id)sender {
    UISegmentedControl *seg = (UISegmentedControl*) sender;
    [self.delegate didResolveConflictChoice:seg.selectedSegmentIndex];
    [self dismissModalViewControllerAnimated:YES];
}

我检查了每个连接,所有代表都正常工作。出了什么问题:当 MyEngine 在其实现中收到用户的选择时,didSelectConflict:它无法正常继续,因为它的所有属性都已消失null

MyEngine出现 时ConflictViewController,程序继续执行,当start完成时,它返回pressedButton:,当这个方法关闭时,MyEngine对象被释放。

我想知道是否有办法解决这个问题?有没有人以另一种方式做过这样的事情?The question here is: How to get the user's choice properly when the choice is too complex to use UIAlertView.

对不起,这个问题很长,我尽可能地简化了它。感谢您的宝贵时间,非常感谢任何链接、评论或任何形式的帮助

4

2 回答 2

2

为什么要MyEngine *engine在 IBAction 中进行初始化,如果您希望使用 MyEngine 对象,为什么不在您的全局声明中InitialViewController并调用[engine start]IBaction。然后,当委托方法返回所选索引时,您可以将其应用于初始视图控制器中的全局 int 并继续前进。希望这是有道理的

于 2012-07-13T15:05:28.093 回答
0

让你的方法开始为

-(void) startWithDelegate:(id)del {
        ConflictViewcontroller *cvc = [[ConflictViewController alloc] initWithNibName:@"ConflictViewController" bundle:nil];
        cvc.modalPresentationStyle = UIModalPresentationFormSheet;
        cvc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
        cvc.delegate = del;
        UIWindow *window = [(MyAppDelegate *) [[UIApplication sharedApplication] delegate] window];
        [[window rootViewController] presentModalViewController:cvc animated:YES];
}

-(IBAction)pressedButton:(id)sender {
    MyEngine *engine = [[MyEngine alloc] init];
    [engine startWithDelegate:self];
}

实施并didResolveConflictChoice:InitialViewController那里获得代表电话。

或者,如果合适,您可以使用UIActionSheet 。

于 2012-07-13T14:53:01.333 回答