如何使属性在方法中可用(非 Null)?

How can I make a property to be available (non-Null) inside a method?

提问人: 提问时间:11/6/2018 最后编辑:Ani Papyan 更新时间:11/7/2018 访问量:46

问:

我定义了这个属性

@property (nonatomic, strong) NSString *ObjectID;

这是我的 ViewDidLoad:

- (void)viewDidLoad {
    [super viewDidLoad];

    PFQuery *getObjectIDforRow = [PFQuery queryWithClassName:@"Event"];
    [getObjectIDforRow selectKeys:@[@"objectId"]]; // We decide which fields to get
    [getObjectIDforRow whereKey:@"Organizator" notEqualTo:PFUser.currentUser.username];
    [getObjectIDforRow whereKey:@"EventLocation" equalTo:Pointfrommap];

    // This method is to get the ObjectID for the selected row
    [getObjectIDforRow findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
        if (!error) {
            // We save the Object ID found in a NSString
            self.ObjectID = [NSString stringWithFormat:@"%@", [objects valueForKey:@"objectId"]];

            NSLog(@"Object ID %@", self.ObjectID);

            [self getParticipantsarray]; // Here the exception won't come, but self.ObjectID is still null


        } else {
            // Log details of the failure
            NSLog(@"Error: %@ %@", error, [error userInfo]);
        }
    }];


}

这是 getParticipants数组:

-(void)getParticipantsarray{

    NSLog(@"Object ID is %@", self.ObjectID); // ID = Gj95aETEWq

     PFQuery *getArrayParticipants = [PFQuery queryWithClassName:@"Event"];
    [getArrayParticipants selectKeys:@[@"Participants"]]; // We decide which fields to get

    [getArrayParticipants whereKey:@"ObjectId" equalTo:self.ObjectID]; // Here ObjectID is Null 
        } else {
            // Log details of the failure
            NSLog(@"Error: %@ %@", error, [error userInfo]);
        }
    }];
}

我的问题:

出于某种原因,我不知道,在我创建的 中保存一个 null 值,而在方法内的 和 事件中,保存正确的值。ObjectIDgetArrayParticipantsPFQueryviewDidLoad

我的猜测:

我认为它与同步/异步线程有关,正如之前所指出的那样

iOS Objective-C 方法 parse-platform 属性

评论

0赞 Paulw11 11/6/2018
您必须在设置属性之前进行调用(可能从其他位置调用,或者您正在某个位置创建视图控制器的另一个实例)。设置断点以标识调用方。getParticipantsArraygetParticipantsArray
0赞 11/6/2018
这是非常合乎逻辑的:)但它仍然因为同样的例外而崩溃,恐怕
1赞 danh 11/6/2018
我无法解析发布的代码。你遗漏了一些吗?也许 PFQuery find 在哪里运行?我认为正在发生的事情是,您正在查询的(异步)完成块中设置objectId属性,但在该查询完成之前对其进行测试。你能仔细检查代码吗?它无法按原样编译
0赞 Paulw11 11/6/2018
好的,经过你的编辑,它更有意义;您正在异步设置。self.objectID
0赞 11/6/2018
是的,我粘贴了完整的 viewdidload !

答: 暂无答案