AMcoder - javascript, python, java, html, php, sql

iPhone - հասցեագրքի որոնման վթար

Մեր հավելվածների խանութի որոշ օգտատերեր իրենց հասցեագրքում որոնելիս հայտնում են վթարի մասին: Ես այստեղ բավականին կորած եմ, քանի որ չեմ կարող վերարտադրել այս հարցը:

մուտքագրեք պատկերի նկարագրությունը այստեղ

Ինչ-որ սխալ կա՞ այն հարցում, թե ինչպես եմ հարցումներ անում հասցեագրքում: շնորհակալություն!!

+ (NSDictionary *) scanAddressBook
{
    #if TARGET_OS_IPHONE
    NSUInteger i;
    CFIndex index;

    ABAddressBookRef addressBook = ABAddressBookCreate();
    NSArray *people = (NSArray *) ABAddressBookCopyArrayOfAllPeople(addressBook);

    if ( people==nil || (people && ([people count] == 0)))
    {
        TRACE_LOG(@"scanAddressBook ", @"NO ADDRESS BOOK ENTRIES TO SCAN");
        if(people) [people release];
        CFRelease(addressBook);
        return nil;
    }

    NSMutableArray *numbersArray = [NSMutableArray new];
    NSMutableArray *mailsArray = [NSMutableArray new];

    for ( i=0; i<[people count]; i++ )
    {
        NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];

        ABRecordRef person = (ABRecordRef)[people objectAtIndex:i];

        NSMutableDictionary *phoneDictionary = [NSMutableDictionary new];

        CFStringRef firstName = ABRecordCopyValue(person, kABPersonFirstNameProperty);
        CFStringRef lastName = ABRecordCopyValue(person, kABPersonLastNameProperty);

        NSString* log =[NSString stringWithFormat:@"-----CONTACT ENTRY -> %@ : %@", firstName, lastName ];
        TRACE_LOG(@"scanAddressBook",log);


        NSString *userName = @"NoName";
        if (firstName && lastName)
            userName = [NSString stringWithFormat:@"%@ %@", firstName, lastName];
        else if (firstName)
            userName = [NSString stringWithFormat:@"%@", firstName];
        else if (lastName)
            userName = [NSString stringWithFormat:@"%@", lastName];

        if(firstName) CFRelease(firstName);
        if(lastName) CFRelease(lastName);
        //
        // Phone Numbers
        //
        ABMutableMultiValueRef phoneNumbers = ABRecordCopyValue(person, kABPersonPhoneProperty);
        CFIndex phoneNumberCount = ABMultiValueGetCount( phoneNumbers );

        for ( index=0; index<phoneNumberCount; index++ )
        {
            CFStringRef phoneNumberLabel = ABMultiValueCopyLabelAtIndex( phoneNumbers, index);
            CFStringRef phoneNumberValue = ABMultiValueCopyValueAtIndex( phoneNumbers, index);
            CFStringRef phoneNumberLocalizedLabel = ABAddressBookCopyLocalizedLabel( phoneNumberLabel );    
            // converts "_$!<Work>!$_" to "work" and "_$!<Mobile>!$_" to "mobile"
            // Find the ones you want here
            //

            NSString* log =[NSString stringWithFormat:@"-----PHONE ENTRY -> %@ : %@", phoneNumberLocalizedLabel, phoneNumberValue ];
            TRACE_LOG(@"scanAddressBook",log);

            if (![NetworkingUtils validatePhoneNumber:(NSString *)phoneNumberValue]) {
                NSLog(@"invalid phone number: %@",phoneNumberValue);
                CFRelease(phoneNumberLocalizedLabel);
                CFRelease(phoneNumberLabel);
                CFRelease(phoneNumberValue);
                continue;
            }

            [phoneDictionary setObject:(NSString *)phoneNumberValue forKey:InviteUserDataNumberKeyID];
            [phoneDictionary setObject:(NSString *)phoneNumberLocalizedLabel forKey:InviteUserDataNumberTypeKeyID];
            [phoneDictionary setObject:(NSString *)userName forKey:InviteUserDataNameTypeKeyID];

            CFRelease(phoneNumberLocalizedLabel);
            CFRelease(phoneNumberLabel);
            CFRelease(phoneNumberValue);
            NSMutableDictionary *copyPhoneDict = [phoneDictionary copy];
            [numbersArray addObject:copyPhoneDict];
            [copyPhoneDict release];
        }
        CFRelease(phoneNumbers);
        [phoneDictionary release];

        NSMutableDictionary *mailDictionary = [NSMutableDictionary new];
        ABMutableMultiValueRef emails = ABRecordCopyValue(person, kABPersonEmailProperty);
        CFIndex mailsNumberCount = ABMultiValueGetCount( emails );
        for ( index=0; index < mailsNumberCount; index++ )
        {
            CFStringRef emailValue = ABMultiValueCopyValueAtIndex( emails,index);
            // converts "_$!<Work>!$_" to "work" and "_$!<Mobile>!$_" to "mobile"
            // Find the ones you want here
            //
            NSString* log =[NSString stringWithFormat:@"-----EMAIL ENTRY -> : %@", emailValue ];
            TRACE_LOG(@"scanAddressBook",log);



            if (![NetworkingUtils validateEmail:(NSString *)emailValue]) {
                NSLog(@"invalid email address: %@",(NSString *)emailValue);
                if (emailValue) {
                    CFRelease(emailValue);
                }
                continue;
            }

            [mailDictionary setObject:(NSString *)emailValue forKey:InviteUserDataMailKeyID];
            [mailDictionary setObject:(NSString *)@"email" forKey:InviteUserDataMailTypeKeyID];
            [mailDictionary setObject:(NSString *)userName forKey:InviteUserDataMailOwnerKeyID];

            if (emailValue) {
                CFRelease(emailValue);
            }

            NSMutableDictionary *copyMailDict = [mailDictionary copy];
            [mailsArray addObject:copyMailDict];
            [copyMailDict release];
        }
        if(emails) CFRelease(emails);
        [mailDictionary release];


        [pool drain];
    }

    NSString *countryCode = [[NSUserDefaults standardUserDefaults] objectForKey:RequestUserCountryCodeKeyID];
    if (!countryCode) {
        NSLocale *locale = [NSLocale currentLocale];
        NSString *aCode = [locale objectForKey: NSLocaleCountryCode];
        countryCode = [[NetworkingUtils codesByCountryCode] objectForKey:aCode];
    }

    NSDictionary *aDictionary = [NSDictionary dictionaryWithObjectsAndKeys: [[numbersArray copy] autorelease], InviteUsersNumbersArrayKeyID, 
                                 [[mailsArray copy] autorelease], InviteUsersMailsArrayKeyID,
                                 countryCode, RequestUserCountryCodeKeyID, nil];

    [numbersArray release];
    [mailsArray release];

    [people release];
    CFRelease(addressBook);

    return aDictionary;
#else 
    return nil ;
#endif
}

Պատասխանները:


1

CFRelease()-ը կխափանվի, եթե դուք տրամադրեք NULL արժեք: Ես տեսնում եմ, որ ձեր CFRelease() զանգերից շատերը ստուգում են NULL-ը, բայց ոչ բոլորը:

Ամենայն հավանականությամբ դրանցից մեկը վթարի պատճառն է:

Ես այնքան էլ ծանոթ չեմ ABAddressBook-ին, ուստի չգիտեմ, թե ինչ իրավիճակներում նրանք կվերադառնան NULL:

Համապատասխան նշումով, Objective-C-ի -release մեթոդը չի խափանում nil-ին, այնպես որ դուք կարող եք նաև փոխել if(people) [people release];-ը ընդամենը [people release];-ի, քանի որ Objective-C-ի բոլոր մեթոդները լուռ ոչինչ չեն անի, եթե ուղարկվեն nil:

11.12.2011
Նոր նյութեր

Օգտագործելով Fetch Vs Axios.Js-ը՝ HTTP հարցումներ կատարելու համար
JavaScript-ը կարող է ցանցային հարցումներ ուղարկել սերվեր և բեռնել նոր տեղեկատվություն, երբ դա անհրաժեշտ լինի: Օրինակ, մենք կարող ենք օգտագործել ցանցային հարցումը պատվեր ներկայացնելու,..

Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար
Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար Ինչպե՞ս հանգստացնել ձեր միտքը և աշխատեցնել ձեր պրոցեսորը: Ինչպես մնալ հանգիստ և զարգանալ ճնշման տակ...

Մեքենայի ուսուցում բանկային և ֆինանսների ոլորտում
Բարդ, խելացի անվտանգության համակարգերը և հաճախորդների սպասարկման պարզեցված ծառայությունները բիզնեսի հաջողության բանալին են: Ֆինանսական հաստատությունները, մասնավորապես, պետք է առաջ մնան կորի..

Ես AI-ին հարցրի կյանքի իմաստը, այն ինչ ասում էր, ցնցող էր:
Այն պահից ի վեր, երբ ես իմացա Արհեստական ​​ինտելեկտի մասին, ես հիացած էի այն բանով, թե ինչպես է այն կարողանում հասկանալ մարդկային նորմալ տեքստը, և այն կարող է առաջացնել իր սեփական արձագանքը դրա..

Ինչպես սովորել կոդավորումը Python-ում վագրի պես:
Սովորելու համար ծրագրավորման նոր լեզու ընտրելը բարդ է: Անկախ նրանից, թե դուք սկսնակ եք, թե առաջադեմ, դա օգնում է իմանալ, թե ինչ թեմաներ պետք է սովորել: Ծրագրավորման լեզվի հիմունքները, դրա..

C++-ի օրական բիթ(ե) | Ամենաերկար պալինդրոմային ենթաշարը
C++ #198-ի ամենօրյա բիթ(ե), Ընդհանուր հարցազրույցի խնդիր. Ամենաերկար պալինդրոմային ենթատող: Այսօր մենք կանդրադառնանք հարցազրույցի ընդհանուր խնդրին. Ամենաերկար palindromic substring...

Kydavra ICAReducer՝ ձեր տվյալների ծավալայինությունը նվազեցնելու համար
Ի՞նչ է ICAReducer-ը: ICAReducer-ն աշխատում է հետևյալ կերպ. այն նվազեցնում է նրանց միջև բարձր փոխկապակցված հատկանիշները մինչև մեկ սյունակ: Բավականին նման է PCAreducer-ին, չնայած այն..