Domanda

I inizializzare una vista (immagine) attraverso:

Image *myImageView = [[Image alloc]init];
    myImageView.myId = randomImageNumber;
    [myImageView initWithImage:myImage];

Al di classe Immagine faccio un registro (LOG1) e ottenere il precedentemente impostata randomImageNumber. Più tardi, nella stessa classe, faccio un secondo registro (LOG2). Perché il mio secondo registro ha più alcun valore?

Ecco mia implementazione file della classe Image:

@synthesize myId;
-(id) initWithImage: (UIImage *) anImage
{
    NSLog(@"LOG1%d",myId);
    if ((self = [super initWithImage:anImage]))
    {
        self.userInteractionEnabled = YES;
    }
    return self;
}

}
-(void)touchesBegan...
....
- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
  NSLog(@"LOG2%d",myId);
}

I "Ritorno automatico" svuota MyID che ho dichiarato nel file di intestazione, e che è stato fissato al inizializzazione. Come posso evitare questo?

il mio aspetto Headerfile come questo:

@interface Image : UIImageView 
{
   int myId;
}
@property (assign) int myId;

@end
È stato utile?

Soluzione

paio di cose nel codice. MAI chiamare init più di una volta su un oggetto, che solo le viti il ??vostro oggetto.

Cambia a questo:

Image *myImageView = [[Image alloc] initWithImage:myImage];
myImageView.myId = randomImageNumber;

Questo è il tuo problema, per impostazione predefinita quando l'inizializzazione di una sottoclasse di NSObject, tutte le proprietà sono impostate per 0 (o nil se sono puntatori).

Se avete bisogno di avere un valore predefinito per myId quindi fare questo:

// Image.m

@implementation

// other code

-(id) initWithImage:(UIImage *) image
{
    if (self = [super initWithImage:image])
    {
         self.myId = randomImageNumber;
    }

    return self;
}

// other code

@end

Altri suggerimenti

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top