0

在执行另一项任务之前,如何确保查询已完成(无论成功与否)。

这是我的viewDidLoad...最后这行代码

 NSLog(@"tweets Array %@",self.tweetsArray);

显示 tweetsArray 为空

然而,上面块中的同一行代码显示数组已满。

输出还显示第一个之前的最后一个 NSLog。

我的 tableView 在模拟器上是空白的,因为它在完成运行查询之前调用了 UITableView 方法。

对此的任何帮助都会很棒。

在此先感谢...尼克

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
self.tableView.dataSource = self;
self.tableView.delegate = self;

self.selectString = self.gamesString;
PFQuery *query = [PFQuery queryWithClassName:@"Parse_Storyw"];
[query whereKey:@"searchName" equalTo:self.gamesString];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {

    if (!error) {
        // Do something with the found objects
        for (PFObject *object in objects) {
            NSLog(@"%@", object.objectId);


            PFQuery *query = [PFQuery queryWithClassName:@"Parse_Story"];
            [query getObjectInBackgroundWithId:object.objectId block:^(PFObject *content, NSError *error) {

                PFFile *file = [content objectForKey:@"levels"];

                [file saveInBackground];
                [file getDataInBackgroundWithBlock:^(NSData *data, NSError *error) {
                    NSString *string = [[NSString alloc] initWithData: data  encoding: NSMacOSRomanStringEncoding];

                    self.tweetsArray = [[NSArray alloc] initWithArray:[string componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]]];

                    NSLog(@"tweets Array %@",self.tweetsArray);


                }];
            }];
        }

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

self.title = self.selectString;

NSLog(@"tweets Array %@",self.tweetsArray);

}
4

2 回答 2

1
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.


self.selectString = self.gamesString;
PFQuery *query = [PFQuery queryWithClassName:@"Parse_Storyw"];
[query whereKey:@"searchName" equalTo:self.gamesString];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {

if (!error) {
    // Do something with the found objects
    for (PFObject *object in objects) {
        NSLog(@"%@", object.objectId);


        PFQuery *query = [PFQuery queryWithClassName:@"Parse_Story"];
        [query getObjectInBackgroundWithId:object.objectId block:^(PFObject *content, NSError *error) {

            PFFile *file = [content objectForKey:@"levels"];

            [file saveInBackground];
            [file getDataInBackgroundWithBlock:^(NSData *data, NSError *error) {
                NSString *string = [[NSString alloc] initWithData: data  encoding: NSMacOSRomanStringEncoding];

                self.tweetsArray = [[NSArray alloc] initWithArray:[string componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]]];

                NSLog(@"tweets Array %@",self.tweetsArray);
                self.tableView.dataSource = self;
                self.tableView.delegate = self;

            }];
        }];
    }

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

self.title = self.selectString;

NSLog(@"tweets Array %@",self.tweetsArray);

尝试这个..

于 2013-11-07T10:07:37.323 回答
0
  1. 在你的代码里面 forloop 你不断更新self.tweetsArray

              self.tweetsArray = [[NSArray alloc] initWithArray:[string  componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]]];
    

    每次数组加载新数据时,在这一行中。如果要更改 tableView 内容,请动态使用[yourTableView reloadData]

  2. 如果self.tweetsArray内容已修改,那么您必须使用[self.tableView reloadData]来影响 TableView 中的更改。

于 2013-11-07T10:21:11.480 回答