为什么我的NSLog被调用两次



我有一个ID从我的服务器,我想在两个不同的视图控制器访问的帖子。第一个视图控制器是一个显示帖子的表视图。用户将选择一行,该帖子的ID将传递给下一个视图控制器,以显示有关该帖子的详细信息。我使用下面的代码:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    PFObject *objectId = [collectionArray objectAtIndex:indexPath.row];
    selectedObjectID = [objectId objectId];
    self.objectID = [objectId objectId];
    [self performSegueWithIdentifier:@"details" sender:self];
}
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier  isEqual: @"details"]) {
        PreviewDetailsViewController *details = (PreviewDetailsViewController *)[segue destinationViewController];
        details.objectID = self.objectID;
    }
}

" selectedobjecid "是一个外部变量,"self "。"objectID"是我为两个类设置的属性,并试图在prepareForSegue方法中设置它。这两种方法都是一样的。它将变量传递给下一个视图控制器但是当我

NSLog(@"object = %@", self.objectID);

NSLog(@"object = %@", selectedObjectID);
下一个视图控制器的viewDidLoad中的

,它将ID传递给下一个视图控制器,但它退出了这个

object = (null)
object = Zz81bHEeJD

这就像它被调用了两次,当我试图查询"self"时,调用很重要。" objecd "或" selectedobjecid "我得到

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', 
reason: 'Cannot do a comparison query for type: (null)'

这让我很头疼。

谁能给我解释一下这里发生了什么,我该如何纠正?

viewDidLoad在视图控制器加载时被调用。当你在prepareForSegue中,你知道视图控制器已经被加载-因为你能够从destinationViewController获得对它的引用。这意味着viewDidLoad在您给details.objectId赋值之前执行。

您应该在viewWillAppear等方法中访问该属性,或者在PreviewDetailsViewController上的objectId属性的自定义设置中触发您的查询。

我假设extern只是为了测试,但不要使用extern

最新更新