2017-03-11 3 views
0

je me connecte une entrée en utilisant ma propre fonction journal:EXC_AD_ACCESS sur la bonne chaîne

if(drive1SandboxBookmark)dapperLog(logWindow,100,@"Got a sandbox bookmark for %@",drive1SandboxBookmark); 

J'obtient l'accès Bad Exe de cette fonction, apparemment sans raison. Il est parfois en train de faire ce même où la chaîne de tapis est juste une chaîne, pas d'arguments ... totalement déconcerté:

void dapperLog(logWindowController *controller,int level,NSString *format, ...) { 

    if(logLevel<level)return; 
    va_list argumentList; 
    va_start(argumentList, format); 
    if(!format)return; 
    NSLog(@"%@",format); 

    NSMutableString * message = [[NSMutableString alloc] initWithFormat:format 
                   arguments:argumentList]; 
    va_end(argumentList); 
    if(currentRunningOSVersion<100900){ 
     NSLog(@"%@",message); 
    return; 
    } 

enter image description here

+1

Comment «drive1SandboxBookmark» est-il défini? –

+0

est-ce que 'drive1SandboxBookmark.description' fonctionne bien? – newacct

Répondre

-1

Vous obtenez une exception si le premier élément format contient un espace réservé (par exemple %@) mais il n'y a pas d'argument correspondant. Btw: Vous n'avez pas besoin mutable Chaîne du tout.

+0

Dans l'exemple illustré, il existe un seul argument non nul selon la ligne appelante. C'est un nsstring en fait ... Supposons qu'il est en quelque sorte nul quand il arrive, je me demande ce qui se passe entre l'appel et la fonction d'exécution. – JeremyLaurenson

+0

Strictement parlant, 'va_list' n'est pas une chaîne ** one **, c'est une liste de chaînes séparées par des virgules. Assurez-vous simplement que le nombre d'espaces réservés correspond au nombre d'arguments. – vadian

+0

Ils le font. Quelque chose d'autre se passe ici, je dois effacer quelques caches de construction – JeremyLaurenson