0

私はobjective-cを初めて使用し、記録が保持されるアプリを作成しています。ボタンを押してもデータが保存されないか、保存されても表示されないのですが、保存ボタンをクリックすると追加する方法を作ってみました。データはtableViewに表示されています

保存ボタンのコードは次のとおりです。

-(void)savePatient:(id)sender {
LSAppDelegate *delegate = (LSAppDelegate *)[[UIApplication sharedApplication] delegate];
NSMutableArray *patients = delegate.patients;

UITextField *firstnameEntry = (UITextField *)[firstNameCell viewWithTag:777];
UITextField *surnameEntry = (UITextField *)[surnameNameCell viewWithTag:777];
UITextField *dobEntry = (UITextField *)[dobDateCell viewWithTag:777];
UITextField *homeNumberEntry = (UITextField *)[homeNumberCell viewWithTag:777];
UITextField *mobileNumberEntry = (UITextField *)[mobileNumberCell viewWithTag:777];
UITextField *emailAddressEntry = (UITextField *)[emailAddressCell viewWithTag:777];
UITextView *addressEntry = (UITextView *)[addressCell viewWithTag:777];

if (firstnameEntry.text.length > 0) {
    Patient *newPatient = [[Patient alloc] init];
    newPatient.patientName = firstnameEntry.text;
    newPatient.patientSurname = surnameEntry.text;
    newPatient.patientDoB = dobEntry.text;
    newPatient.patientHomeNumber = homeNumberEntry.text;
    newPatient.patientMobileNumber = mobileNumberEntry.text;
    newPatient.patientEmail = emailAddressEntry.text;
    newPatient.patientAddress = addressEntry.text;
    newPatient.patientPicture = nil;
    [patients addObject:newPatient];
    LSViewController *viewController = delegate.viewController;
    [viewController.tableView reloadData];
}
    [delegate.navController popViewControllerAnimated:YES];

}

問題はここにあることがわかりました

if (firstnameEntry.text.length > 0) {

さらにコードが必要な場合は言ってください

前もって感謝します

4

2 に答える 2

3

プロパティのコピーはNSMutableArrayではなく配列を返すため、デリゲートが適切な保持タイプを持ち、コピーしないことを確認する必要があります。

データのロードに関する問題は、おそらく配列の割り当て/初期化を行わないという単純な問題です。患者配列をローカル クラスに移動することをお勧めします。

このプロパティをデリゲートからクラスに移動します。

@property (nonatomic, retain) NSMutableArray *patients;

コピーを使用せず、NSArray を使用しないでください。 また、どこかで可変配列をインスタンス化していることを確認する必要があります。できればviewDidLoad関数で。

あなたのクラスでは、このviewcontrollerが作成される前のどこかに、必ず配列を作成してください。

self.patients = [[NSMutableArray alloc] init];

これは、ARC を使用していることを前提としています。ARC を使用していない場合は、必ず dealloc メソッドで配列を解放してください。

通常、データが表示されない場合、配列は nil または NSArray であり、NSMutableArray ではありません。

また、上記のメソッドにブレークポイントを追加し、tableView が nil ではなく、配列が nil でないことを確認します。

于 2013-06-21T18:03:31.407 に答える
0

実際に実行されると確信していますか? [viewController.tableView reloadData];別のviewControllerを使用しているため、真剣に疑っています。編集中のviewControllerからポップした後、テーブルコントローラービューのviewDidAppearイベントにreloatDataステートメントを配置してみてください。

于 2013-06-21T19:30:24.203 に答える