0
ABMultiValueRef phonesRef = ABRecordCopyValue(person, kABPersonPhoneProperty);
    for (int i=0; i < ABMultiValueGetCount(phonesRef); i++)
    {
        CFStringRef currentPhoneLabel = ABMultiValueCopyLabelAtIndex(phonesRef, i);
        CFStringRef currentPhoneValue = ABMultiValueCopyValueAtIndex(phonesRef, i);

        if (currentPhoneLabel != nil && currentPhoneValue != nil)
        {
            if (CFStringCompare(currentPhoneLabel, kABPersonPhoneMobileLabel, 0) == kCFCompareEqualTo)
            {
                [contactInfoDict setObject:(__bridge NSString *)currentPhoneValue forKey:@"workNumber"];
            }

            if (CFStringCompare(currentPhoneLabel, kABHomeLabel, 0) == kCFCompareEqualTo)
            {
                [contactInfoDict setObject:(__bridge NSString *)currentPhoneValue forKey:@"homeNumber"];
            }
        }
        else if (currentPhoneValue != nil && currentPhoneLabel == nil)
        {
            [contactInfoDict setObject:(__bridge NSString *)currentPhoneValue forKey:@"workNumber"];
        }

        CFRelease(currentPhoneLabel);
        CFRelease(currentPhoneValue);
    }
    CFRelease(phonesRef);

連絡先の電話を iOS アプリにインポートするためのコードを次に示しますが、currentPhoneLabel が CFRelease(currentPhoneLabel) の nil xocde の場合。なぜそれが起こっているのかわかりません。どんな助けでも非常に価値があります。

ありがとう

4

1 に答える 1

0

コード内の他の場所にはすでにガードがあるため、次の呼び出しごとにガードを追加するだけで済みCFRelease()ます。

if (currentPhoneLabel != NULL)
    CFRelease(currentPhoneLabel);
// etc.
于 2015-12-24T10:56:05.950 に答える