Ios NSTimer上的xcode UIAlertView

Ios NSTimer上的xcode UIAlertView,ios,multithreading,Ios,Multithreading,我想在15分钟计时器上设置一个警报视图,并按是或否按钮。如果用户停留在该视图上,则此操作正常。但是,UIAlertView在其标题和委托方法中使用局部变量。当用户更改视图时,程序崩溃。我是否可以让UIAlertView等待15分钟,然后实现委托方法?我试图将委托方法放在其他视图中,但不知道如何传递带有警报的变量。我做了一些研究,并考虑可能使用通知或后台线程(但我认为后台线程不能做UI的事情,而警报是UI) 当它崩溃时,错误日志会说什么?2014-04-03 12:03:10.297 CDDoct

我想在15分钟计时器上设置一个警报视图,并按是或否按钮。如果用户停留在该视图上,则此操作正常。但是,UIAlertView在其标题和委托方法中使用局部变量。当用户更改视图时,程序崩溃。我是否可以让UIAlertView等待15分钟,然后实现委托方法?我试图将委托方法放在其他视图中,但不知道如何传递带有警报的变量。我做了一些研究,并考虑可能使用通知或后台线程(但我认为后台线程不能做UI的事情,而警报是UI)


当它崩溃时,错误日志会说什么?2014-04-03 12:03:10.297 CDDoctors[1940:60b]-[\uu NSCFDictionary alertView:ClickedButtonIndex:]:发送到实例0xBA8DCE0的无法识别的选择器看起来在视图被破坏时计时器正在启动。我认为这不应该发生,因为NSTimer应该保持对目标对象的强引用,但我认为不应该对视图执行此操作,也不应该在视图代码中使用类似的逻辑(这是一个视图,不是视图控制器,对吧?)我将其放在视图控制器中,我知道我的逻辑不好。那么,我可以用另一种方式在定时UIAlert视图上获得响应吗?-(void)viewDidLoad{u timer=[NSTimer scheduledTimerWithTimeInterval:30目标:自选择器:@selector(goBack:)userInfo:nil重复:NO];…}-(void)goBack{//Pop到上一个视图控制器或其他任何地方。}-(void)didPressButton:(id)发送方{[\u timer invalidate];\u timer=nil;}
- (IBAction)sendInAppMsg:(UIButton *)sender
{
    ....
    //****This is the message that calls the UIAlertView on a timer
    [NSTimer scheduledTimerWithTimeInterval:10 target:self selector:@selector(pause) userInfo:nil repeats:NO];
}


-(void) pause
{
    UIAlertView *responseAlert = [[UIAlertView alloc] initWithTitle:@"Success?" message:[NSString stringWithFormat:@"Did you reach %@  %@", self.currentDoc.firstName, self.currentDoc.lastName ] delegate:self cancelButtonTitle:nil otherButtonTitles:@"Yes", @"No",  nil];
    [responseAlert show];
}


-(void) alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{

    //Update Parse Cloud with users response
    PFObject *contactAttempt = [PFObject objectWithClassName:@"ContactAttempt"];
    contactAttempt  [@"inApp"] = @"push";
    contactAttempt [@"from"] = [[PFUser currentUser] username];
    contactAttempt [@"to"] = [NSString stringWithFormat:@"%@  %@", self.currentDoc.firstName, self.currentDoc.lastName ];
    if (buttonIndex == 0) {
        contactAttempt  [@"response5"] =  @YES;
        [contactAttempt saveInBackground];
    }
    if (buttonIndex == 1)
    {
        contactAttempt  [@"response5"] =  @NO;
        [contactAttempt saveInBackground];
    }
}
//works fine and updates cloud with user response unless user changes views :(