Search code examples
objective-ciosxcode4automatic-ref-counting

Type conversion of &self causes compiler error


In an ARC environment, I have the following code:

NSInvocation* invocation = [NSInvocation invocationWithMethodSignature:signature];
[invocation setTarget:delegate];
[invocation setSelector:@selector(restClient:loadedFile:contentType:eTag:)];
// Error Here!
[invocation setArgument:&self atIndex:2];
[invocation setArgument:&filename atIndex:3];
[invocation setArgument:&contentType atIndex:4];
[invocation setArgument:&eTag atIndex:5];

Setting the argument to index 2 (&self) causes the following compiler error:

Sending *const __strong * to parameter of type void * changes retain/release properties

I have no idea how to fix this while keeping valid code. At the moment I'm just sticking in NULL and wrapping the invoke statement in a try/catch block, but that's a less-than-ideal solution.


A similar issue, if anyone would be kind enough to address it as well:

With this line of code (from the MPOAuth library)

status = SecItemCopyMatching((__bridge CFDictionaryRef)searchDictionary, (CFTypeRef *)&attributesDictionary);

I get the following error

Cast of an indirect pointer to an Objective-C pointer to 'CFTypeRef ' (aka 'const void *') is disallowed with ARC


Solution

  • Rather than changing the SDK (Dropbox has said that they'll be posting an ARC-compatible version soon), I found out that I can use ARC selectively for a file. So I did that.

    And then I upgraded to the 1.0b2, which is packaged as a library and so the issue is solved.