Im getting the following error
Sending "NSString *_strong*to parameter of type _unsafe_unretained id* "changes retain/release properties of pointer …
in the following line: [theDict getObjects:values andKeys:keys];
Im trying to add an address from contacts to my app. Could someone explain to me what its complaining about? I think its an ARC issue, possibly to do with manual memory management? but im unsure how to fix it.
- (BOOL)peoplePickerNavigationController:
(ABPeoplePickerNavigationController *)peoplePicker
shouldContinueAfterSelectingPerson:(ABRecordRef)person
property:(ABPropertyID)property
identifier:(ABMultiValueIdentifier)identifier
{
if (property == kABPersonAddressProperty) {
ABMultiValueRef multi = ABRecordCopyValue(person, property);
NSArray *theArray = (__bridge id)ABMultiValueCopyArrayOfAllValues(multi);
const NSUInteger theIndex = ABMultiValueGetIndexForIdentifier(multi, identifier);
NSDictionary *theDict = [theArray objectAtIndex:theIndex];
const NSUInteger theCount = [theDict count];
NSString *keys[theCount];
NSString *values[theCount];
[theDict getObjects:values andKeys:keys]; <<<<<<<<< error here
NSString *address;
address = [NSString stringWithFormat:@"%@, %@, %@",
[theDict objectForKey: (NSString *)kABPersonAddressStreetKey],
[theDict objectForKey: (NSString *)kABPersonAddressZIPKey],
[theDict objectForKey: (NSString *)kABPersonAddressCountryKey]];
_town.text = address;
[ self dismissModalViewControllerAnimated:YES ];
return YES;
}
return YES;
}
The docs for NSDictionary getObjects:andKeys: show it as:
But the two values you are passing in are strong NSString references (local variables and ivars are strong by default. This is why there is the ARC error. Your parameters don’t match the expected types.
Change:
to:
should fix the compiler issue.
This change means that none of the objects in your arrays are safely retained. But as long as ‘theDict’ doesn’t go out scope before ‘keys’ and ‘values’ then you will be OK.