Xcode:为什么我的NSLog被调用两次?

时间:2014-06-20 17:08:53

标签: ios objective-c xcode

我有一个来自我的服务器的帖子的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;
    }
}

“selectedObjectID”是一个extern变量,“self.objectID”是我为两个类设置的属性,并尝试在prepareForSegue方法中设置它。这两种方式都可以做同样的事情。它将变量传递给下一个视图控制器,但是当我

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

NSLog(@"object = %@", selectedObjectID);

在下一个视图控制器的viewDidLoad中,它将ID传递给下一个视图控制器,但它会将此注销

object = (null)
object = Zz81bHEeJD

就像它被调用两次而当我尝试查询“self.objectID”或“selectedObjectID”时,调用很重要

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', 
reason: 'Cannot do a comparison query for type: (null)'
这让我很头疼。

任何人都可以向我解释这里发生了什么,以及如何纠正这个问题?

1 个答案:

答案 0 :(得分:1)

加载视图控制器时会调用

viewDidLoad。当您在prepareForSegue时,您知道视图控制器已经被加载 - 因为您可以从destinationViewController获得对它的引用。这意味着在为viewDidLoad分配值之前会执行details.objectId

您应该使用viewWillAppear等方法访问该媒体资源,或者在objectId的{​​{1}}媒体资源的自定义设置中触发您的查询。

我认为PreviewDetailsViewController仅用于测试,但不使用externs