0

複数のセクションを持つ UITableView があります。テーブルビューのセクションには 2 つの行があり、そのうちの 1 つは編集可能 (挿入ボタン) で、もう 1 つはアドレス帳からの名前を表示します。セルの挿入ボタンをクリックすると、peoplePickerView が読み込まれ、連絡先が選択されます。

アドレス帳から連絡先を取得します

- (BOOL)peoplePickerNavigationController: (ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person {

    NSString *firstName = (__bridge NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty);

    NSString *middleName = (__bridge NSString *)ABRecordCopyValue(person, kABPersonMiddleNameProperty);

    NSString *lastName = (__bridge NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty);

    self.contactName = [NSString stringWithFormat:@"%@/%@/%@", firstName ?: @"", middleName ?: @"", lastName ?: @""];

    [self.myTableView reloadData];
    [self dismissViewControllerAnimated:YES completion:nil];
    return NO;
}

tableview の cellForRowAtIndexPath について

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{ 
    if(indexPath.section == 0){
        if(indexPath.row == 0){
        cell.textLabel.text = self.contactName;
        NSLog(@"Contact Name %@", self.contactName);
    }
    else{
        cell.textLabel.text = @"";
    }
}
}

firstname プロパティのみを文字列に設定すると、文字列は正しい値になりますが、文字列 (最初の + ミドルネーム + ラストネーム) を連結してテーブルビューをリロードしようとすると、null 値が返されます。私は何を間違っていますか、どうすれば修正できますか?

4

3 に答える 3

1

以下の行を置き換えてみてください。

self.contactName = [NSString stringWithFormat:@"%@/%@/%@", firstName ?: @"", middleName ?: @"", lastName ?: @""];

このようにチェックしてください。

self.contactName = [[NSString alloc] initWithFormat:@"%@/%@/%@", firstName ?: @"", middleName ?: @"", lastName ?: @""];
于 2013-03-18T05:59:14.483 に答える
1

私が間違っていたのは、プロパティ contactName を弱いと宣言したことです

@property(nonatomic, weak) NSString *contactName;

Ahmadが提案したように、文字列を連結する前にnullもチェックしてください。

于 2013-03-18T16:34:31.663 に答える
0

2つのことを確認する必要があります

  1. [NSString stringWithFormat...たとえば、viewDidLoadで呼び出す前にself.contactNameを初期化していることは、次のことを行いますself.contactName = [NSString alloc] init]

2. nil 文字列を文字列に連結しようとすると、最終結果も nil になります。連結コードに含まれるすべての文字列に nil ではなく値があることを確認してください。

于 2013-03-18T06:10:03.953 に答える