Crash sur NSError
Hello,
J'ai un crash que je n'arrive pas à comprendre, enfin je sais que ça un rapport avec ARC.
Voici un bout de mon code :
- (BOOL)validateWithError:(NSError *__autoreleasing *)error {
__block BOOL valid = YES;
[self.objs enumerateObjectsUsingBlock:^(SGInsured *insured, NSUInteger idx, BOOL *stop) {
NSInteger age = [self age:insured.dateNaissance];
if (age < kMinimumYearAge || age > kMaximumYearAge) {
if (error) {
NSString *desc = NSLocalizedString(@La date de naissance est incorrecte, nil);
NSDictionary *userInfo = @{NSLocalizedDescriptionKey:desc};
*error = [[NSError alloc] initWithDomain:SGInsuredErrorDomain code:SGInsuredErrorCodeDateOfBirth userInfo:userInfo];
}
valid = NO;
*stop = YES;
}
}];
return valid;
}
Quand j'apple cette méthode j'ai un crash : " [NSError retain] Message sent do deallocated instance"
J'apelle la méthode comme suit ;
NSError *error;
BOOL valid = [self.validator validateWithError:&error];
....
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
T'es vraiment un fanboy de pur race, toi ..
Non je suis plutôt mauvais en orthographe .
Bon j'ai corrigé mon crash de cette façon :
PS : J'aurais pu ne pas mettre le __strong puisque c'est le qualificatif par défaut mais je trouve ça plus explicite.
Doc :
https://developer.apple.com/library/ios/releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html
Un bug ARC ?
En même temps c'est pas étonnant car ce qui est capturé par le block de enumerateObjectsUsingBlock c'est "error" (donc NSError**) et pas "*error" du coup je peux comprendre qu'il s'emmêle les pinceaux dans ce genre de cas. Du coup bien vu pour la solution