एक्सेस करता है मेरी ऐप में, क्रैशलिटिक्स का उपयोग उपयोगकर्ताओं से क्रैश रिपोर्ट एकत्र करने के लिए किया जाता है। उपयोगकर्ता से एक क्रैश रिपोर्ट यहां दी गई है। यह संभवतः उपयोगकर्ता की संपर्क जानकारी के आधार पर है। मैं दुर्घटना को फिर से नहीं बना सकता, क्योंकि मुझे नहीं पता कि उसके संपर्क में क्या है। क्या किसी को इस स्थिति के बारे में कोई जानकारी है?क्रैश रिपोर्ट जब उपयोगकर्ता पता पुस्तिका
com.apple.root.default-priority Crashed
0 CoreFoundation CFStringCreateCopy + 13
1 AppSupport CPSqliteDatabaseCreateWithPath + 36
2 AppSupport CPSqliteDatabaseCreateWithPath + 36
3 AppSupport CPRecordStoreGetDatabase + 16
4 AppSupport _getReaderConnection + 10
5 AppSupport CPRecordStoreProcessQueryWithBindBlock + 22
6 AppSupport CPRecordStoreCopyAllInstancesOfClassWhereWithBindBlock + 98
7 AddressBook ABCCopyArrayOfAllPeopleInSourceWithSortOrdering + 244
8 SeeYouKee PhoneNumberInputViewController.m line 538-[PhoneNumberInputViewController dofetchContacts:]
9 AddressBook __37-[ABTCC accessRequestWithCompletion:]_block_invoke_0 + 26
10 TCC __TCCAccessRequest_block_invoke_038 + 316
11 ... libxpc.dylib _xpc_connection_call_reply + 26
12 libdispatch.dylib _dispatch_root_queue_drain + 278
13 libdispatch.dylib _dispatch_worker_thread2 + 92
14 libsystem_c.dylib _pthread_wqthread + 360
8 SeeYouKee PhoneNumberInputViewController.m line 538-[PhoneNumberInputViewController dofetchContacts:]
के लिए कोड है:
NSArray *contactsInAddressBook = CFBridgingRelease(ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering(addressBook, nil, kABPersonSortByLastName));
संपादित करें 1
-(void)dofetchContacts:(ABAddressBookRef)addressBook{
NSMutableArray *contactMutArr = [NSMutableArray array];
NSMutableString *mStrOfContacts = [NSMutableString string];
NSArray *contactsInAddressBook = CFBridgingRelease(ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering(addressBook, nil, kABPersonSortByLastName));
if (ABPersonGetCompositeNameFormat() == kABPersonCompositeNameFormatLastNameFirst) {
for (id aPerson in contactsInAddressBook) {
ABRecordRef person = (__bridge ABRecordRef)(aPerson);
ABMultiValueRef phoneMultiValue = ABRecordCopyValue(person, kABPersonPhoneProperty);
ABMultiValueRef emailMultiValue = ABRecordCopyValue(person, kABPersonEmailProperty);
int countPhone = 0;
int countEmail = 0;
NSMutableArray *phoneStrArr;
NSMutableArray *emailStrArr;
if (phoneMultiValue != NULL) {
countPhone = ABMultiValueGetCount(phoneMultiValue);
}
if (emailMultiValue != NULL) {
countEmail = ABMultiValueGetCount(emailMultiValue);
}
if (countEmail>0) {
emailStrArr = [NSMutableArray array];
for (int i = 0; i < countEmail; i++) {
CFStringRef anEmailCF = ABMultiValueCopyValueAtIndex(emailMultiValue, i);
NSString *anEmail = (__bridge NSString *)anEmailCF;
[emailStrArr addObject:anEmail];
if (anEmailCF != NULL)CFRelease(anEmailCF);
}
}
if (countPhone > 0) {
phoneStrArr = [NSMutableArray array];
for (int i = 0; i < countPhone; i++) {
CFStringRef anPhoneCF = ABMultiValueCopyValueAtIndex(phoneMultiValue, i);
NSString *anPhone = (__bridge NSString *)anPhoneCF;
NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:@""] invertedSet];
NSString *anPhonePureNumber = [[anPhone componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
[phoneStrArr addObject:anPhonePureNumber];
if (anPhoneCF != NULL)CFRelease(anPhoneCF);
}
}
// if (arrRefOfEmails != NULL)CFRelease(arrRefOfEmails);
CFStringRef lastNameMultiValueCF = ABRecordCopyValue(person, kABPersonLastNameProperty);
CFStringRef firstNmaeMultiValueCF = ABRecordCopyValue(person, kABPersonFirstNameProperty);
CFStringRef middleNmaeMultiValueCF = ABRecordCopyValue(person, kABPersonMiddleNameProperty);
NSString *lastNameMultiValue = (__bridge NSString *)lastNameMultiValueCF;
NSString *firstNmaeMultiValue = (__bridge NSString *)firstNmaeMultiValueCF;
NSString *middleNmaeMultiValue = (__bridge NSString *)middleNmaeMultiValueCF;
NSString *name = [NSString stringWithFormat:@"%@%@%@",(![lastNameMultiValue length])[email protected]"":lastNameMultiValue, (![middleNmaeMultiValue length])[email protected]"":middleNmaeMultiValue, (![firstNmaeMultiValue length])[email protected]"":firstNmaeMultiValue];
if (lastNameMultiValueCF != NULL)CFRelease(lastNameMultiValueCF);
if (firstNmaeMultiValueCF != NULL)CFRelease(firstNmaeMultiValueCF);
if (middleNmaeMultiValueCF != NULL)CFRelease(middleNmaeMultiValueCF);
CFDataRef anAvatarCF = ABPersonCopyImageDataWithFormat(person, kABPersonImageFormatThumbnail);
NSData *anAvatarData = (__bridge NSData *)anAvatarCF;
UIImage *anAvatar = [UIImage imageWithData:anAvatarData];
if (anAvatarCF != NULL)CFRelease(anAvatarCF);
NSDictionary *aPersonDict = [NSDictionary dictionaryWithObjectsAndKeys:name, @"name", [phoneStrArr componentsJoinedByString:@"; "], @"phoneNumber", [emailStrArr componentsJoinedByString:@"; "], @"email", anAvatar, @"avatar", nil];
[contactMutArr addObject:aPersonDict];
NSLog(@"------phoneStrArr :%@",phoneStrArr);
NSString *enPhoneNumber = @"";
if (phoneStrArr) {
enPhoneNumber = [EncryptWithMD5 encryptWithMD5: [phoneStrArr componentsJoinedByString:@"; "]];
}
[mStrOfContacts appendString:enPhoneNumber];
[mStrOfContacts appendString:@", "];
if (phoneMultiValue != NULL)CFRelease(phoneMultiValue);
if (emailMultiValue != NULL)CFRelease(emailMultiValue);
}
}else{
for (id aPerson in contactsInAddressBook) {
ABRecordRef person = (__bridge ABRecordRef)(aPerson);
ABMultiValueRef phoneMultiValue = ABRecordCopyValue(person, kABPersonPhoneProperty);
ABMultiValueRef emailMultiValue = ABRecordCopyValue(person, kABPersonEmailProperty);
int countEmail = 0;
NSMutableArray *emailStrArr;
NSMutableArray *phoneStrArr;
if (emailMultiValue != NULL) {
countEmail = ABMultiValueGetCount(emailMultiValue);
}
if (countEmail>0) {
emailStrArr = [NSMutableArray array];
for (int i = 0; i < countEmail; i++) {
CFStringRef anEmailCF = ABMultiValueCopyValueAtIndex(emailMultiValue, i);
NSString *anEmail = (__bridge NSString *)anEmailCF;
[emailStrArr addObject:anEmail];
if (anEmailCF != NULL)CFRelease(anEmailCF);
}
}
int count = ABMultiValueGetCount(phoneMultiValue);
if (count > 0) {
phoneStrArr = [NSMutableArray array];
for (int i = 0; i < count; i++) {
CFStringRef anPhoneCF = ABMultiValueCopyValueAtIndex(phoneMultiValue, i);
NSString *anPhone = (__bridge NSString *)anPhoneCF;
NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:@""] invertedSet];
NSString *anPhonePureNumber = [[anPhone componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
[phoneStrArr addObject:anPhonePureNumber];
if (anPhoneCF != NULL)CFRelease(anPhoneCF);
}
}
CFStringRef lastNameMultiValueCF = ABRecordCopyValue(person, kABPersonLastNameProperty);
CFStringRef firstNmaeMultiValueCF = ABRecordCopyValue(person, kABPersonFirstNameProperty);
CFStringRef middleNmaeMultiValueCF = ABRecordCopyValue(person, kABPersonMiddleNameProperty);
NSString *lastNameMultiValue = (__bridge NSString *)lastNameMultiValueCF;
NSString *firstNmaeMultiValue = (__bridge NSString *)firstNmaeMultiValueCF;
NSString *middleNmaeMultiValue = (__bridge NSString *)middleNmaeMultiValueCF;
NSString *name = [NSString stringWithFormat:@"%@%@%@", (![firstNmaeMultiValue length])[email protected]"":firstNmaeMultiValue, (![middleNmaeMultiValue length])[email protected]"":middleNmaeMultiValue,(![lastNameMultiValue length])[email protected]"":lastNameMultiValue];
if (lastNameMultiValueCF != NULL)CFRelease(lastNameMultiValueCF);
if (firstNmaeMultiValueCF != NULL)CFRelease(firstNmaeMultiValueCF);
if (middleNmaeMultiValueCF != NULL)CFRelease(middleNmaeMultiValueCF);
CFDataRef anAvatarCF = ABPersonCopyImageDataWithFormat(person, kABPersonImageFormatThumbnail);
NSData *anAvatarData = (__bridge NSData *)anAvatarCF;
UIImage *anAvatar = [UIImage imageWithData:anAvatarData];
if (anAvatarCF != NULL)CFRelease(anAvatarCF);
NSDictionary *aPersonDict = [NSDictionary dictionaryWithObjectsAndKeys:name, @"name", [phoneStrArr componentsJoinedByString:@"; "], @"phoneNumber", [emailStrArr componentsJoinedByString:@"; "], @"email", anAvatar, @"avatar", nil];
[contactMutArr addObject:aPersonDict];
NSString *enPhoneNumber = [EncryptWithMD5 encryptWithMD5: [phoneStrArr componentsJoinedByString:@"; "]];
[mStrOfContacts appendString:enPhoneNumber];
[mStrOfContacts appendString:@", "];
if (phoneMultiValue != NULL)CFRelease(phoneMultiValue);
if (emailMultiValue != NULL)CFRelease(emailMultiValue);
}
}
self.contactArr = [[NSArray alloc] initWithArray: contactMutArr];
strOfContacts = [NSString stringWithString:mStrOfContacts];
}
संपादित 2
-(void)beginFetchContacts{
// Request authorization to Address Book
ABAddressBookRef addressBookRef = NULL;
if (ABAddressBookRequestAccessWithCompletion) {
CFErrorRef *aError=nil;
addressBookRef = ABAddressBookCreateWithOptions(NULL, aError);
if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined) {
ABAddressBookRequestAccessWithCompletion(addressBookRef, ^(bool granted, CFErrorRef error) {
// First time access has been granted, add the contact
if (granted) {
[self dofetchContacts:addressBookRef];
}else{
// [self alertActionSwitchOnTheContactsAccess];
[self buttonCancelPressed:nil];
}
});
}
else if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized) {
// The user has previously given access, add the contact
[self dofetchContacts:addressBookRef];
}
}else{
addressBookRef = ABAddressBookCreate();
[self dofetchContacts:addressBookRef];
}
if (addressBookRef != NULL)CFRelease(addressBookRef);
}
यदि संभव हो तो कृपया अपना स्रोत कोड फ़ॉर्म प्रदान करें जहां आप पता पुस्तिका से संपर्क ला रहे हैं? कुछ दिन पहले भी मुझे एक दुर्घटना हो रही थी और यह कोर फाउंडेशन ऑब्जेक्ट की गलत रिलीज साबित हुई। –
@ दीपेश कृपया अपडेट की जांच करें। –
@ दीपेश मैंने सोचा कि मुझे कारण मिला है। यह ABPersonGetCompositeNameFormat पर है। –