J'essaie de vérifier si un CGRect
est null
dans mon getter de propriété et si c'est le cas, chargez une valeur par défaut. Toutefois, dans ma méthode init, lorsque j'utilise la propriété, il renvoie zéro pour toutes les valeurs.
Voici mon getter:
- (CGRect)frame
{
if(CGRectIsNull(_frame))
_frame = CGRectMake(0,0,60,60);
return _frame;
}
- (id)init
{
self = [super initWithFrame:self.frame];
if(self)
{
//do something
}
return self;
}
Je ne sais pas ce qui se passe et où regarder. Toute aide est très appréciée.
Lorsque vous créez une instance de votre classe, la variable d'instance _frame
est automatiquement initialisée, avant même que la méthode init
ne soit appelée. Puisque _frame
est une structure C (CGRect
), sa mémoire est effacée à zéro. Il en résulte une CGRect
avec toutes les valeurs zéro.
CGRectNull
est un spécial, non nul CGRect
. Donc, votre chèque utilisant CGRectIsNull()
ne sera jamais vrai.
Utiliser CGRectIsEmpty
est une vérification plus appropriée pour cela.
Essayer
- (CGRect)frame
{
if (CGRectIsEmpty(_frame))
_frame = CGRectMake(0,0,60,60);
return _frame;
}
Voici une réponse mise à jour pour Swift 4. Vous pouvez simplement utiliser la propriété isNull
boolean de CGRect pour rechercher CGRectNull maintenant:
let someRect = CGRect.null
print(someRect.isNull) // true