0

別のタスクを実行する前に、クエリが (成功したかどうかにかかわらず) 終了したことを確認するにはどうすればよいですか。

これが私のviewDidLoadです...最後にあるこのコード行

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

tweetsArray が空であることを示しています

ただし、上記のブロックの同じコード行は、配列がいっぱいであることを示しています。

出力には、最初の NSLog の前の最後の NSLog も表示されます。

クエリの実行が完了する前に UITableView メソッドを呼び出しているため、シミュレーターでは tableView が空白です。

これに関するヘルプは素晴らしいでしょう。

前もって感謝します... ニック

- (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 に答える