performseguewithidentifier不在IBAction方法中工作

时间:2014-06-21 04:42:01

标签: ios iphone objective-c xcode uistoryboard

我有一个故事板,在视图和以下代码之间连接了一个segue。由于某种原因,segue没有被调用,我很肯定它被正确命名。我想知道它是否不起作用,因为它是在IBAction方法或什么。我很困惑,所以如果你有任何想法,请告诉我。感谢。

-(IBAction)didPressSubmit:(id)sender{

    NSString *idOfObject = [[NSUserDefaults standardUserDefaults] objectForKey:@"idOfObject"];


    PFQuery *query = [PFQuery queryWithClassName:@"RequestsClass"];


    [query getObjectInBackgroundWithId:idOfObject block:^(PFObject *myObj, NSError *error) {

        myObj[@"hasResponded"] = @"has";
        myObj[@"answer"] = textField.text;
        [myObj saveInBackground];



    }];

        [self performSegueWithIdentifier:@"userDidRespond" sender:self];
}

也没有错误,没有任何反应。我在称为“即将执行segue”的行的正上方添加了一个NSLog,它打印得很好。所以我不确定。

我也收到了这个警告

Warning: A long-running Parse operation is being executed on the main thread. 
 Break on warnParseOperationOnMainThread() to debug

所以我可能需要Deque主线程或类似的东西?感谢

3 个答案:

答案 0 :(得分:0)

移动此行:

[self performSegueWithIdentifier:@"userDidRespond" sender:self];

在街区内。

像这样:

-(IBAction)didPressSubmit:(id)sender{

NSString *idOfObject = [[NSUserDefaults standardUserDefaults] objectForKey:@"idOfObject"];


PFQuery *query = [PFQuery queryWithClassName:@"RequestsClass"];


[query getObjectInBackgroundWithId:idOfObject block:^(PFObject *myObj, NSError *error) {

    myObj[@"hasResponded"] = @"has";
    myObj[@"answer"] = textField.text;
    [myObj saveInBackground];

    [self performSegueWithIdentifier:@"userDidRespond" sender:self];

}];

}

我希望这会成功。

答案 1 :(得分:0)

您还可以通过以下代码在不使用performSegueWithIdentifier方法的情况下从一个视图控制器导航到另一个视图控制器。

 UIStoryboard *story = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
 viewController *viewObj = [story instantiateViewControllerWithIdentifier:@"viewController"];

 [self.navigationController pushViewController:viewObj animated:YES];

为此,你必须将storyboardID作为" viewController"提供给viewcontroller。在你的故事板中。通过这种方法,您还可以为下一个视图设置对象。

答案 2 :(得分:0)

你得到的解析警告是无关的,应该提出另一个问题。它告诉你,你正在尝试连接主线程上的Parse(可能是登录?)。您希望在具有完成块的其他线程上异步执行此操作。

这样的事情:(在SWIFT中)

PFUser.logInWithUsernameInBackground(userName.text, password: passwordField.text, block: {
        (user,error) in
        completion(error == nil)
    })

Parse在Objective-C中也有很多例子。