0

ボタンをUITableView押すと次のセグエがあります。実装ファイルに実装したコードは次のとおりです。ビューはシフトしていますが、データがビューにロードされていません。

何が問題なのですか?

- (void)viewDidLoad
{
    [super viewDidLoad];
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSData* data = [NSData dataWithContentsOfURL:
                        [NSURL URLWithString: @"https://api.twitter.com/1/statuses/public_timeline.json"]];
        NSError* error;
        tweets = [NSJSONSerialization JSONObjectWithData:data
                                                 options:kNilOptions
                                                   error:&error];
        dispatch_async(dispatch_get_main_queue(), ^{
            [self.tableView reloadData];
        });
    });

    // Uncomment the following line to preserve selection between presentations.
    // self.clearsSelectionOnViewWillAppear = NO;

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    // self.navigationItem.rightBarButtonItem = self.editButtonItem;
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    // Return the number of sections.
    return 0;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return tweets.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"TweetCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }
    NSDictionary *tweet = [tweets objectAtIndex:indexPath.row];
    NSString *text = [tweet objectForKey:@"text"];
    NSString *name = [[tweet objectForKey:@"user"] objectForKey:@"name"];
    cell.textLabel.text = text;
    cell.detailTextLabel.text = [NSString stringWithFormat:@"by %@", name];
    return cell;
}
4

3 に答える 3

1
(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    // Return the number of sections.
    return 0;
}

少なくとも1つのセクションは必要ありませんか?

于 2012-08-15T11:28:30.553 に答える
0

デバッガーでブレークポイントを使用してnumberOfRowsInSectionメソッドを中断し、cellForRowAtIndexPathデータが正しく解析および処理されていることを確認する必要があります。ブレークポイントに慣れていない場合は、ブレークポイントを理解する良い機会です。ブレークポイントは問題のデバッグと解決に非常に役立ちます。

dataWithContentsOfURL一般的な注意として、ネットワークを行うために を使用するべきではありません。それは本当にその使用のために設計されていません。NSURLConnectionはるかに優れたオプションであり、柔軟性が大幅に向上します。

于 2012-08-15T11:27:59.383 に答える
0
dyspatch_async

is as という名前は、非同期であるためです。最初の呼び出しの後に 2 番目の呼び出しが実行されると考えているようですが、違います。それらは並行して実行され、URL 操作が遅くなるため、データがまだないときにテーブル ビューの更新が発生します。

解決策: reloadData 呼び出しを URL 操作と同じブロックに入れます。dispatch_async を 2 回個別に呼び出す必要はありません。

また、あなたは0を返します

numberOfSectionsInTableView:

そのため、テーブルはデータを探しません。1を返します。

于 2012-08-15T11:34:31.107 に答える