Pregunta

Arc me está dando un momento difícil con el siguiente elenco:

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

Error: el elenco de un puntero indirecto a un puntero Objective-C a 'CftypeF '(AKA' const void *') está rechazado con arco

¿Fue útil?

Solución

El problema es que los atributos no deberían ser un diccionario, debe ser un seckeyref o cfdatarf. Y luego vuelva a colocar 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;

Otros consejos

Mientras estábamos haciendo algo similares 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 en algún lugar a la memoria.

CFDataRef resultRef = nil;

Esto solucionará el error.

Necesidad de cambio attributes a &attributes

CFDataRef attributes;
SecItemCopyMatching((__bridge CFDictionaryRef) keychainItemQuery,  ( CFTypeRef*) &attributes);
NSData* passDat=(__bridge_transfer NSData*) attributes;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top