我有一个故事板,在视图和以下代码之间连接了一个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主线程或类似的东西?感谢
答案 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中也有很多例子。