Hice la "Generación y análisis" en xCode y obtengo "Desreferencia de puntero nulo" al establecer una int normal en 0 en mi método init. Anoté en mi código a continuación para qué fila recibí el mensaje. Estoy desarrollando para iPhone.Desreferencia de puntero nulo, pero no estoy utilizando punteros
Bric.m
#import "Bric.h"
@implementation Bric
- (id)initWithImage:(UIImage *)img:(NSString*)clr{
if (self = [super init]) {
image = [[UIImageView alloc] initWithImage:img];
}
stepX = 0; //It's for this line I get the message
stepY = 0;
oldX = 0;
color = [[NSString alloc]initWithString:clr];
visible = YES;
copied = NO;
return self;
}
@end
Bric.h
#import <Foundation/Foundation.h>
@interface Bric : NSObject {
int stepX;
int stepY;
}
-(id)initWithImage:(UIImage *)img:(NSString *)clr;
@end
No es el código completo, pegar lo que creo que es útil.
Como no estoy usando un puntero, esto me parece bastante extraño. ¿Cómo es que recibo este mensaje?
Gracias y saludos, Niklas
Gracias, ahora entiendo. Esto solucionó el problema. Supongo que no debería necesitar escribir "if ((self = [super init]))", usted acaba de escribir eso para reaons pedagógicos, rigth? Nunca he visto doble parátesis antes en ese lugar. – Nicsoft
Los paréntesis dobles le dicen al compilador que evalúe el 'self = [super init]' primero y luego evalúe el resultado como un booleano después. Con el nuevo compilador LLVM, no tener doble paréntesis alrededor de una asignación en una instrucción 'if' generará una advertencia, porque el compilador está preguntando" inteligentemente "si se pretendía usar' == 'en lugar de' = '(que es un error común al hacer algo como 'if (x == 5)'. – Jasarien