objective-c automatic-ref-counting

objective c - Puntero fundido con ARC



objective-c automatic-ref-counting (3)

ARC me está haciendo pasar un mal momento con el siguiente reparto:

NSDictionary *attributes; SecItemCopyMatching((__bridge CFDictionaryRef)keychainItemQuery, (CFTypeRef *)&attributes);

Error: la conversión de un puntero indirecto a un puntero de Objective-C a ''CFTypeRef '' (también conocido como ''const void * '') no está permitida con ARC


Como estábamos haciendo algo similar y usando el ejemplo anterior, nos enfrentamos a otro problema:

CFDataRef resultRef; OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)searchDictionary, (CFTypeRef *)&resultRef); NSData* result = (__bridge_transfer NSData*)resultRef;

Esto dará como resultado un EXEC_BAD_ACCESS, porque resultRef no se establece en ninguna dirección y apunta a algún lugar de la memoria.

CFDataRef resultRef = nil;

Esto solucionará el error.


El problema es que los atributos no deberían ser un diccionario, deberían ser un SecKeyRef o CFDataRef. Y luego vuelva a convertir eso en NSData para los datos de contraseña copiados en él.

Al igual que:

CFDataRef attributes; SecItemCopyMatching((__bridge CFDictionaryRef)keychainItemQuery, (CFTypeRef *)&attributes); NSData *passDat = (__bridge_transfer NSData *)attributes;


Necesidad de cambiar attributes a &attributes

CFDataRef attributes; SecItemCopyMatching((__bridge CFDictionaryRef) keychainItemQuery, ( CFTypeRef*) &attributes); NSData* passDat=(__bridge_transfer NSData*) attributes;