2

このplistからデータを取得するのを手伝ってくれる人はいますか? plist 内の 3 つのオブジェクトの値にアクセスできません。

tableView ですべての国のリストを表示できますが、セルをタップしても価格が表示されません。助けてくださいありがとう

マイリスト

plistスナップショット

<plist version="1.0">
<dict>
    <key>Afghanistan 3</key>
    <array>
        <string>RC $1.65</string>
        <string>CC $2.36</string>
        <string>EC 0</string>
    </array>
    <key>Albania 1</key>
    <array>
        <string>RC FREE</string>
        <string>CC $1.01</string>
    </array>
    <key>Algeria 2</key>
    <array>
        <string>RC $0.27</string>
        <string>CC $0.85</string>
    </array>
    <key>Andorra 2</key>
    <array>
        <string>RC FREE</string>
        <string>CC $0.93</string>

xcode 4.5 で実装した私のコードも。cc は、plist の項目 0 にある通話料金です rc は、plist の項目 1 にある受信料金です
ec は、plist の項目 2 にある追加料金です

次のView Controllerのセルをクリックしたときに、cc、rc、およびecをそれぞれラベルに表示するにはどうすればよいですか? マイコード

NSString *ratesFile = [[NSBundle mainBundle] pathForResource:@"rates" ofType:@"plist"];
    rates = [[NSDictionary alloc]initWithContentsOfFile:ratesFile];
    NSArray * dictionaryKeys = [rates allKeys];
    name = [dictionaryKeys sortedArrayUsingSelector:@selector(compare:)];
    cc = [rates objectForKey:@"Item 0"];
    rc = [rates objectForKey:@"Item 1"];
    ec = [rates objectForKey:@"Item 2"];

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [rates count];
}

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

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

    NSString *countryName = [name objectAtIndex:indexPath.row];
    cell.textLabel.text = countryName;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
   NSString *ccRate = [cc objectAtIndex:indexPath.row];


    if (!self.detailViewController) {
        self.detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
    }

    self.detailViewController.detailItem = ccRate;

    [self.navigationController pushViewController:self.detailViewController animated:YES];
}

少し早いですがお礼を

4

2 に答える 2

1

cc、rc、および ec へのアクセスが正しくありません。didSelectRowAtIndexPath:メソッドでは、indexPath に関連付けられたキーの配列を取得する必要があります。次に、そこから配列値を取得します。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    NSString *countryName = [name objectAtIndex:indexPath.row];
    NSArray *countryInfo = [rates objectForKey:countryName];

    // the countryInfo array has the RC, CC, and EC values.
}

「レート」には「アイテム 0」、「アイテム 1」などのキーを持つオブジェクトがないことに注意してください。レートは配列になっています。配列はキー付けされていません。

于 2012-10-14T21:37:28.347 に答える
0

cellForRowAtIndexPathでこれを行います-配列はキー(名前)の値です

NSString *rc = [[rates objectForKey:name] objectAtIndex:0];
NSString *cc = [[rates objectForKey:name] objectAtIndex:1];
于 2012-10-14T21:34:05.780 に答える