我使用ABPeoplePickerNavigationController讓用戶選擇一個地址。在模擬器中一切正常。但是如果一個地址包含像「ü」這樣的非ASCII字符,我的設備上的結果會很奇怪。我有這樣的代碼:NSString似乎殺死Unicode字符
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier {
ABMultiValueRef addressesMultiValue = ABRecordCopyValue(person, property);
NSArray *addresses = (__bridge_transfer NSArray*)ABMultiValueCopyArrayOfAllValues(addressesMultiValue);
CFRelease(addressesMultiValue);
NSDictionary *addressData = [addresses objectAtIndex:0];
NSLog(@"%@", addressData);
NSArray *addressKeys = [[NSArray alloc] initWithObjects:(NSString*)kABPersonAddressStreetKey,
(NSString*)kABPersonAddressZIPKey,
(NSString*)kABPersonAddressCityKey,
(NSString*)kABPersonAddressStateKey,
(NSString*)kABPersonAddressCountryKey,
(NSString*)kABPersonAddressCountryCodeKey, nil];
NSMutableString *address = [[NSMutableString alloc] init];
for (NSString *key in addressKeys) {
NSString *object = [addressData objectForKey:key];
if (object) {
[address appendFormat:@"%@, ", object];
}
}
NSLog(@"%@", address);
爲addressData的輸出是這樣的:
{
City = "M\U00fcnchen";
Country = Deutschland;
CountryCode = de;
Street = "Some street";
ZIP = 81000;
}
和輸出的地址是:
Some street, 81000, München, Deutschland, de,
的地址正確的輸出將是「一些81000,慕尼黑,德國,德,「。最令我困惑的是,\ u00fc是「ü」的正確的Unicode代碼點。我嘗試了很多東西,包括單獨打印每一個unichar,但結果不會改變。無論我在訪問NSDictionary中的值時做什麼似乎都會殺死Unicode字符。我能做些什麼來簡單地獲取地址?
非常感謝您提前!
謝謝。我沒有想到這一點,因爲Xcode的調試窗口顯示來自模擬器的字符串很好,我轉發地址的地理編碼器也失敗了。但重啓設備後,地理編碼器運行良好,因此它真的只是一個顯示問題! – aus 2012-04-02 16:56:46