0

我收到以下错误

Sending "NSString *_strong*to parameter of type _unsafe_unretained id* "changes retain/release properties of pointer...

在以下行中: [theDict getObjects:values andKeys:keys]; 我正在尝试将联系人中的地址添加到我的应用程序中。有人可以向我解释它在抱怨什么吗?我认为这是一个 ARC 问题,可能与手动内存管理有关?但我不确定如何解决它。

   - (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;
 }
4

2 回答 2

1

NSDictionary getObjects:andKeys: 的文档显示为:

- (void)getObjects:(id __unsafe_unretained [])objects andKeys:(id __unsafe_unretained [])keys

但是您传入的两个值是强 NSString 引用(默认情况下,局部变量和 ivars 是强的。这就是出现 ARC 错误的原因。您的参数与预期的类型不匹配。

改变:

NSString *keys[theCount];
NSString *values[theCount];

到:

NSString * __unsafe_unretained keys[theCount];
NSString * __unsafe_unretained values[theCount];

应该修复编译器问题。

此更改意味着您的数组中的所有对象都不会被安全保留。但是只要 'theDict' 没有超出 'keys' 和 'values' 之前的范围,那么你就可以了。

于 2012-10-13T00:04:25.073 回答
-1

你是正确的,这是一个 ARC 错误,你试图将 NSArrays 分配给 NSStrings 并且你试图创建一个 NSStrings 数组,我不确定它是否会按照你想要的方式工作。

我看不到你以后会在哪里使用它们,但是你会想做的

NSArray *keys, *values;

摆脱错误。

于 2012-10-13T00:04:14.777 回答