私はABPeoplePickerNavigationControllerを使ってユーザにアドレスを選択させています。 Simulatorですべてうまく動作します。しかし、アドレスに "ü"のような非ASCII文字が含まれていると、デバイス上で結果が奇妙になります。私はこのコードを持っている:NSStringはユニコード文字を消しているようです
- (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);
は、アドレスデータの出力には、このようなものです:
{
City = "M\U00fcnchen";
Country = Deutschland;
CountryCode = de;
Street = "Some street";
ZIP = 81000;
}
とアドレスの出力は次のとおりです。
Some street, 81000, München, Deutschland, de,
アドレスの正しい出力は「一部のだろう通り、81000、München、Deutschland、de、 "最も困惑しているのは、\ U00fcが "ü"の正しいUnicodeコードポイントだということです。私は、すべてのunicharを単独で印刷することを含む多くのことを試みましたが、結果は変わりません。 NSDictionaryの値にアクセスするときに私が行うことは、Unicode文字を強制終了するようです。単に住所を正しく取得するために何ができますか?
ありがとうございます!
ありがとうございます。 Xcodeのデバッグウィンドウにシミュレータの文字列が表示され、アドレスを転送するジオコーダが失敗したため、私はそのことを考えなかった。しかし、デバイスをリブートした後、ジオコーダーは正常に動作したので、実際には表示上の問題でした。 – aus