0

私はのプロパティを持っています

@property (nonatomic, strong) NSMutableArray *timesArray;

UITableViewにデータを入力するために使用されます。ビューをクリアしたいときは、次のようにします。

- (void)clearView {
    self.nameField.text = @"";
    self.noteField.text = @"";
    if ([_timesArray count] > 0) {
        [self.timesArray removeAllObjects];
        [self.customTableView reloadData];
    }
}

removeAllObjectsはクラッシュを引き起こします。理由はわかりません。私は周りを見回しました、そして、多くの投稿はオブジェクトが過剰にリリースされていることについて話します。ARCを使用していて、オブジェクトに対してretain / releaseを呼び出さない場合、これはどのように発生しますか。私の_timesArrayは、UIDatePickerから取得したNSDateオブジェクトを保持するだけです。

私のスタックトレースは次のようになります。

ここに画像の説明を入力してください

私のinsertPillは次のようになります:

- (void)insertPill:(id)sender {
    //[[NSNotificationCenter defaultCenter] postNotificationName:InsertPillNotification object:self];

    [self clearView];
}

私がすべてのオブジェクトを削除せず、ただ実行する場合:

NSMutableArray *emptyArray = [[NSMutableArray alloc] initWithCapacity:0];
self.timesArray = emptyArray;

これは機能します。しかし、オブジェクトを削除しても機能しない理由を知りたいのですが。

編集:viewDidLoadで配列を初期化します:

_timesArray = [[NSMutableArray alloc] initWithCapacity:0];

配列に新しいオブジェクトを追加する場合は、次のようにします。

NSMutableArray *tempUnsortedArray = [[NSMutableArray alloc] initWithArray:_timesArray];        
        [tempUnsortedArray addObject:_datePicker.date];
        self.timesArray = tempUnsortedArray;

配列がデータを追加する方法が問題の原因であるかどうかはわかりません。

4

2 に答える 2

1

doesNotRecognizeSelector:例外が発生しています。これはおそらく、あなたが思っているオブジェクトがNSMutableArray実際にはそうではないことを意味します。それはおそらくNSArrayです。オブジェクトをどこに割り当てていますか?

問題のデバッグを開始するにはpo、オブジェクトを呼び出す前にremoveAllObjects. どのタイプのオブジェクトとして報告されていますか?

NSObjectそうしないと、 に非要素が存在する可能性がありtimesArrayます。

于 2012-05-07T02:36:36.277 に答える
0
@property (nonatomic, strong) NSMutableArray *timesArray;
if ([_timesArray count] > 0) 

次のようにプロパティを合成しているようです。

@syntesize timesArray = _timesArray;

の数をチェックしていますが_timesArray、 からオブジェクトを削除していますtimesArray。プロパティに新しい名前を設定したことがなく、それがどのように機能するかわかりませんが、好きではありません。

于 2012-05-07T02:29:34.563 に答える