0

現在、iOS で AddressBook を使用しています。ユーザーのすべての連絡先からメールを取得し、NSMutableArray. 次に、この配列をサーバー [PHP] に渡す必要があります。しかし、電子メールが二重引用符で囲まれているという問題があるため、次のようになります。

(
  "user@gmail.com",
  "user2@gmail.com",
  "user3@gmail.com"
)

それが私のコードです:

ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL);
__block BOOL accessGranted = NO;
if (ABAddressBookRequestAccessWithCompletion != NULL) { // we're on iOS 6
    dispatch_semaphore_t sema = dispatch_semaphore_create(0);
    ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
        accessGranted = granted;
        dispatch_semaphore_signal(sema);
    });
    dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
}
else { // we're on iOS 5 or older
    accessGranted = YES;
}

if (accessGranted) {
    CFArrayRef people = ABAddressBookCopyArrayOfAllPeople(addressBook);
    _usersEmails = [[NSMutableArray alloc] initWithCapacity:CFArrayGetCount(people)];
    for (CFIndex i = 0; i < CFArrayGetCount(people); i++) {
        ABRecordRef person = CFArrayGetValueAtIndex(people, i);
        ABMultiValueRef emails = ABRecordCopyValue(person, kABPersonEmailProperty);
        for (CFIndex j=0; j < ABMultiValueGetCount(emails); j++) {
            NSData* email = [(__bridge NSString*)ABMultiValueCopyValueAtIndex(emails, j) dataUsingEncoding:NSUTF8StringEncoding];
            [_usersEmails addObject:email];
        }
        CFRelease(emails);
    }
    CFRelease(addressBook);
    CFRelease(people);

サーバー側を実装していた Web プログラマーは、二重引用符なしで文字列の配列を渡す必要があると私に言いました。

配列の各文字列の二重引用符を削除するにはどうすればよいですか?

アップデート:

これは、サーバーによって受信された実際のデータの一部です。

\"user@gmail.com\"','\"user@gmail.com\"','\"user@gmail.com\"','\"user@me.com\"
4

3 に答える 3

1

NSString のsubstringFromIndexandsubstringToIndexメソッドを使用して、最初と最後の文字を削除できます。何かのようなもの[[string substringToIndex:string.length - 1] substringFromIndex:1];

編集:

ここで引用符を確認/削除できませんか:

NSData* email = [(__bridge NSString*)ABMultiValueCopyValueAtIndex(emails, j) dataUsingEncoding:NSUTF8StringEncoding];

次のようなものを書くことによって:

NSString *string = (__bridge NSString*)ABMultiValueCopyValueAtIndex(emails, j);
NSString *stringWithoutQuotations = [[string substringToIndex:string.length - 1] substringFromIndex:1];
NSData* email = [stringWithoutQuotations  dataUsingEncoding:NSUTF8StringEncoding];
于 2012-12-18T19:16:08.463 に答える
1

NSString がコンソールに出力されると、引用符が表示されます。文字列に実際に引用符が含まれているとは思いません..

代わりにデバッガーのインスペクターを使用して再確認してください。

于 2012-12-18T19:21:13.450 に答える
1

これを行う:

for (NSString* aString in _userEmails) {
    NSLog(@"The string is %@", aString);
}

引用符がないことがわかります。

于 2012-12-18T19:25:23.383 に答える