0

私はObjective-cを初めて使用するので、ちょっと困惑しています。アプリの別の部分に持っていて、問題なく動作しますが、アプリの別のビューで使用すると、アプリがクラッシュします。同じように設定してください。

私は Xcode を使って、混乱しているコードとこのコードの一番上の行にブレークポイントを設定しました。

    NSArray *timesArray = [self.tableDataArray objectAtIndex:2];
    NSDictionary *dictionary = [timesArray objectAtIndex:indexPath.row];
    cell.timeLabel.text = [dictionary objectForKey:@"time"];
    cell.destinationLabel.text = [dictionary objectForKey:@"destination"];

NSArray *timesArray は停止するものですが、他のエラーや何も表示されないため、何を変更すればよいか少し困惑しています。

編集番号 1: わかりやすくするために古い編集を削除しました。

編集番号 2

わかりましたので、ゆっくりともう一度チェックしました。何が起こるかは、データの 3 つの完全な解析を行い、私が持っているすべてのものを出力することです。

2012-06-21 13:37:09.148 NextBus[5990:1a603] Array: (
    {
    routeName = "Oxford West";
    routeNumber = 17;
    stopDirection = Westbound;
    stopName = "Griffith At Commissioners Sb";
    stopNumber = 811;
},
"Next 3 Vehicles Arrive At:",
    (
            {
        destination = "To Byron Baseline / Griffith";
        time = "1:58 P.M.";
    },
            {
        destination = "To Byron Baseline / Griffith";
        time = "2:15 P.M.";
    },
            {
        destination = "To Byron Baseline / Griffith";
        time = "2:35 P.M.";
    }
),
"Prediction Last Updated 1:37:06 Pm 6/21/2012"
)
2012-06-21 13:37:09.148 NextBus[5990:1a603] Array: (
    {
    routeName = "Oxford West";
    routeNumber = 17;
    stopDirection = Westbound;
    stopName = "Griffith At Commissioners Sb";
    stopNumber = 811;
},
"Next 3 Vehicles Arrive At:",
    (
            {
        destination = "To Byron Baseline / Griffith";
        time = "1:58 P.M.";
    },
            {
        destination = "To Byron Baseline / Griffith";
        time = "2:15 P.M.";
    },
            {
        destination = "To Byron Baseline / Griffith";
        time = "2:35 P.M.";
    }
),
"Prediction Last Updated 1:37:06 Pm 6/21/2012"
)
2012-06-21 13:37:09.149 NextBus[5990:1a603] Array: (
    {
    routeName = "Oxford West";
    routeNumber = 17;
    stopDirection = Westbound;
    stopName = "Griffith At Commissioners Sb";
    stopNumber = 811;
},
"Next 3 Vehicles Arrive At:",
    (
            {
        destination = "To Byron Baseline / Griffith";
        time = "1:58 P.M.";
    },
            {
        destination = "To Byron Baseline / Griffith";
        time = "2:15 P.M.";
    },
            {
        destination = "To Byron Baseline / Griffith";
        time = "2:35 P.M.";
    }
),
"Prediction Last Updated 1:37:06 Pm 6/21/2012"
)

そのとき、私は引っ張ってリフレッシュします

2012-06-21 13:37:45.590 NextBus[5990:1a603] Array: (
    {
    routeName = "Oxford West";
    routeNumber = 17;
    stopDirection = Westbound;
    stopName = "Griffith At Commissioners Sb";
    stopNumber = 811;
}
)

そしてクラッシュすると、何らかの理由で解析が停止します。

EGOプルトゥリフレッシュキットです。

4

1 に答える 1

0

編集:

次のバスに利用できる時間がない場合など、クエリが不十分なデータを返すと、クラッシュが発生するようです。これを確認できれば、修正は簡単です。

if ([self.tableDataArray count] > 1) {
  NSArray *timesArray = [self.tableDataArray objectAtIndex:2];
  NSDictionary *dictionary = [timesArray objectAtIndex:indexPath.row];
  cell.timeLabel.text = [dictionary objectForKey:@"time"];
  cell.destinationLabel.text = [dictionary objectForKey:@"destination"];
} else {
  //-- do something to show that no times are available
}

境界を越えて配列にアクセスしようとしている可能性があります。

    NSArray *timesArray = [self.tableDataArray objectAtIndex:2];

timesArray要素が 3 つない場合、プログラムがクラッシュします...

配列が作成される方法と、この操作からの期待を確認する必要があります。

編集:

質問に対して行った編集に基づいて、投稿した行を数回実行しているようで、最後にプログラムがクラッシュしたときだけです。ご覧のとおり、最初の数回の反復で、配列に十分な要素が取り込まれています。最後の場合:

2012-06-21 13:25:03.448 NextBus[5964:1a603] Array: (
{
routeName = Springbank;
routeNumber = 5;
stopDirection = Eastbound;
stopName = "Berkshire At Berkshire Place Sb";
stopNumber = 2196;
}

配列にはオブジェクトが 1 つしかありません。これは別の方法で処理する必要があるまれなケースですか?

于 2012-06-21T17:30:01.100 に答える