2010-03-12 26 views
18

Tôi có lớp 'Liên hệ' với hai thuộc tính: firstName và lastName. Khi tôi muốn hiển thị tên đầy đủ của liên hệ, đây là những gì tôi làm:Chuỗi không có [NSString stringWithFormat:] xuất hiện dưới dạng "(null)"

NSString *fullName = [NSString stringWithFormat:@"%@ %@", contact.firstName, contact.lastName]; 

Nhưng khi firstName và/hoặc lastName được thiết lập để con số không, tôi nhận được một "(null)" trong chuỗi FullName. Để ngăn chặn điều này, đây là những gì tôi làm:

NSString *first = contact.firstName; 
if(first == nil) first = @""; 
NSString *last = contact.lastName; 
if(last == nil) last = @""; 
NSString *fullName = [NSString stringWithFormat:@"%@ %@", first, last]; 

Có ai biết cách tốt hơn/ngắn gọn hơn để làm điều này không?

Trả lời

58

Giả sử bạn là tốt với firstName<space> hoặc <space>lastName:

NSString *fullName = [NSString stringWithFormat:@"%@ %@", 
    contact.firstName ?: @"", contact.lastName ?: @""]; 

(a ?: b là một GCC extension viết tắt của a ? a : b, mà không đánh giá a hai lần.)

+0

Great ví dụ và hữu ích liên kết – JSA986

+2

Bạn có thể sử dụng phương pháp này mà không cần phải thỏa hiệp về , chỉ cần thực hiện như sau sau đó FullName = [FullName stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]]; –

7

NSString *fullName = [NSString stringWithFormat:@"%@ %@", first ? first : @"", last ? last : @""]; chắc chắn là chính xác hơn một chút, nhưng nó có cùng một lỗi mà mã ban đầu của bạn có đó là fullName sẽ là "firstName" hoặc "lastName" (lưu ý các không gian) nếu một hoặc khác không tồn tại. Vì vậy, bạn buộc phải viết mã như

để nó hoạt động bình thường.

1

Đây là cách tôi accompished ...

NSString *lastName = (NSString *)ABRecordCopyValue(personRef, kABPersonLastNameProperty); 
cell.text = [NSString stringWithFormat:@"%@%@",lastName?[NSString stringWithFormat:@"%@ ",lastName]:@"",(NSString *)ABRecordCopyValue(personRef, kABPersonFirstNameProperty)?:@""]; 
0

Đây là cách tôi đã làm nó. Nó không phải là nhỏ gọn như những người khác, nhưng nó dễ đọc hơn tôi cảm thấy (mà luôn luôn là quan trọng nhất đối với tôi).

Nó cũng có lợi ích của việc xóa khoảng trắng ở cuối từ đầu và cuối.

// Remove any nulls from the first or last name 
firstName = [NSString stringWithFormat:@"%@", (firstName ? firstName : @"")]; 
lastName = [NSString stringWithFormat:@"%@", (lastName ? lastName : @"")]; 

// Concat the strings 
fullName = [NSString stringWithFormat:@"%@ %@", firstName, lastName]; 

// Remove any trailing whitespace 
fullName = NSString *newString = [oldString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
Các vấn đề liên quan