连接时NSString具有null值

时间:2013-03-18 05:48:37

标签: uitableview ios5 nsstring abpeoplepickerview

我有一个包含多个部分的UITableView。 tableview的一部分有2行,其中一行是可编辑的(插入按钮),另一行显示地址簿中的名称。 单击单元格中的插入按钮,我正在加载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属性,然后字符串具有正确的值,但是当我尝试连接字符串(第一个+中间+姓氏)并重新加载tableview时,我得到一个空值。我做错了什么,如何纠正呢?

3 个答案:

答案 0 :(得分:1)

尝试替换以下行..

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

就像这样并检查..

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

答案 1 :(得分:1)

我做错了是将属性contactName声明为弱

@property(nonatomic, weak) NSString *contactName;

在连接字符串之前检查null,如Ahmad建议的那样。

答案 2 :(得分:0)

你必须确保两件事

  1. 您在调用[NSString stringWithFormat...之前初始化self.contactName,例如在viewDidLoad中执行以下self.contactName = [NSString alloc] init]
  2. 2.如果您尝试将nil字符串连接到字符串,则最终结果也将为nil,请确保连接代码中包含的所有字符串都具有值而不是nil