0

hpple を使用して Web ページからデータを取得し、テーブル ビューで表示していますが、データがない場合、またはデータを取得できない場合は、セルに「データなし」と表示したいと考えています。しかし、このため、データが読み込まれると、View Controller で約 1 秒間データが表示されません。ここで使用しているコードは次のとおりです。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    switch (section) {
        case 0:
            if ((_deli.count > 0)) {
                return _deli.count;
            }
            else {
                return 1;
            }
            break;
        case 1:
            if ((_entrees.count > 0)) {
                return _entrees.count;
            }
            else {
                return 1;
            }
            break;
     }
     return 0
}

その後

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";


    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

    }
    //[UIColor colorWithRed:191.0f/255.0f green:48/255.0f blue:48/255.0f alpha:1.0]
    cell.textLabel.textColor = [UIColor whiteColor];
    cell.textLabel.font = [UIFont fontWithName:@"TimesNewRomanPS-BoldMT" size:17.0f];

    if (indexPath.section == 0) {
        if ([tableView numberOfRowsInSection:0] == _deli.count ) {
            Items *thisDeli = [_deli objectAtIndex:indexPath.row];
            cell.textLabel.text = thisDeli.title;

        }
        else { cell.textLabel.text = @"No Data Avaiable";
        }

    }
    else if (indexPath.section == 1) {
        if ([tableView numberOfRowsInSection:1] == _entrees.count) {
            Items *thisEntree = [_entrees objectAtIndex:indexPath.row];
            cell.textLabel.text = thisEntree.title;


        }
        else { cell.textLabel.text = @"No Data Avaiable";
        }

    }
}

「データなし」フレーズの出現を遅らせる方法、または空白または取得できない場合にのみ表示する方法はありますか。

これが私の NSURLConnection です

- (void) loadDataUsingNSURLConnection {
    NSString *url = @"http://ueat.site88.net/westTest.xml";
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
        NSLog(@"response == %@", response);
}

事前にご協力いただきありがとうございます。

乾杯

4

1 に答える 1

1

呼び出しがデータの読み込みを完了したかどうかに基づいて、"No Data Available" 文字列を動的にすることを検討してください。呼び出しが完了していない場合は、「読み込み中」などを使用してください。通話が完了した場合は、既存の「利用可能なデータがありません」という文字列が表示されるようにします。

例で編集:

あなたが持っているコードで行う最も簡単な方法は、変数をロードするまで_deli_entrees変数を設定し、メッセージを表示するときにその条件を確認することです。nil

@interface YourViewController ()
{
    NSArray *_deli;
    NSArray *_entrees;
}
@end

配列を nil に設定しますviewDidLoad

- (void)viewDidLoad
{
    [super viewDidLoad];
    _deli = nil;
    _entrees = nil;
}

前のコードのロジックを次のように変更します。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    switch (section) {
        case 0:
            if (_deli == nil || _deli.count == 0) {
                return 1;
            }
            else {
                return _deli.count;
            }
            break;
        case 1:
            if (_entrees == nil || _entrees.count == 0) {
                return 1;
            }
            else {
                return _entrees.count;
            }
            break;
     }

     return 0;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

    }
    //[UIColor colorWithRed:191.0f/255.0f green:48/255.0f blue:48/255.0f alpha:1.0]
    cell.textLabel.textColor = [UIColor whiteColor];
    cell.textLabel.font = [UIFont fontWithName:@"TimesNewRomanPS-BoldMT" size:17.0f];

    if (indexPath.section == 0) {
        if (_deli == nil)
            cell.textLabel.text = @"Loading";
        else if (_deli.count > 0) {
            Items *thisDeli = [_deli objectAtIndex:indexPath.row];
            cell.textLabel.text = thisDeli.title;
        }
        else 
            cell.textLabel.text = @"No Data Avaiable";
    }
    else if (indexPath.section == 1) {
        if (_entrees == nil)
            cell.textLabel.text = @"Loading";
        else if (_entrees.count > 0) {
            Items *thisEntree = [_entrees objectAtIndex:indexPath.row];
            cell.textLabel.text = thisEntree.title;
        }
        else
            cell.textLabel.text = @"No Data Avaiable";
    }
}

応答を書き出すだけなのでloadDataUsingNSURLConnection、配列をどのようにロードしているかはわかりませんが、この時点でアイデアを得る必要があります。応答を配列にロードし、テーブルでメソッドを呼び出してreloadData、新しいデータを表示するだけです。

于 2014-05-20T00:34:43.020 に答える