0

インスタンス変数配列があります:

       @interface ChannelsVC ()
        {
        NSArray *arrayofFrequencies;
        }
    }
    @end

@implementation ChannelsVC
......

「viewDidLoad」で割り当てを行いました

arrayofFrequencies=[[NSArray alloc]init];

次に、JSON データ ソースから配列にデータを挿入します。

-(void)GetFrequencies{

    NSString *urla=@"http://xxxxxxxx";
    NSString *uria = [urla stringByAppendingString:self.lien_satellite];
    NSURL *urlFrequencies= [ NSURL URLWithString:uria];

    NSLog(@"Frequencies URI: %@",uria); //correct URI



    NSURLRequest *request = [NSURLRequest requestWithURL:urlFrequencies];

    AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
        arrayofFrequencies=[JSON valueForKeyPath:@"frequency"];

        NSLog(@"Frequencies count: %lu", (unsigned long)[arrayofFrequencies count]);//the count here is correct, I have data in the array

     } failure:nil];

    [operation start];

 }

問題は、セクション数が '[arrayofFrequencies count];' である UITableView を作成したい場合、常に '0' を返すことです! これはインスタンス変数であり、「GetFrequency」関数の外ではゼロを返しています。

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    NSLog(@"number of sections %ld",(long)[arrayofFrequencies count]); // always returns 0
    return [arrayofFrequencies count];
}

私は何か間違ったことをしていますか?

助けてくれてありがとう。

コンソール出力:

013-06-25 12:58:00.163 Frequencies[840:c07] number of sections 0
2013-06-25 12:58:00.165 Frequencies[840:c07] number of sections 0
2013-06-25 12:58:00.641 Frequencies[840:c07] Frequencies count: 4
4

3 に答える 3

2

[tableView reloadData] を呼び出してから

NSLog(@"Frequencies count: %lu", (unsigned long)[arrayofFrequencies count]);//the count here is correct, I have data in the array

理解するポイントは、viewDidLoad tableView デリゲートが呼び出されることです。その時点で配列カウントはゼロです。後の配列はオブジェクトで埋められます。 reloadDataメソッドは、テーブルのデリゲート メソッドを再度呼び出します。

于 2013-06-25T12:00:27.687 に答える
1

Log Console は、データがロードされる前にデータソース メソッドが呼び出されたことを非常に明確に示しています。

ストーリーボード(またはインターフェイス)またはviewDidLoadでデータソースをセットアップしているため、これは非常に正常です。

UITableViewデータロード後にリロードするだけです

これを試して:

AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
        arrayofFrequencies=[JSON valueForKeyPath:@"frequency"];

        [tableView setDataSource:self];
        [tableView reloadData];

     } failure:nil];

インターフェイスビルダーまたはストーリーボードまたはviewDidLoadからDatasourceを削除して、UITableViewが2回再読み込みしないようにする必要があります。

于 2013-06-25T12:06:42.120 に答える