web-dev-qa-db-fra.com

Vérifier si CGRect est null dans le getter

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.

24
crizzwald

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.

50
rmaddy

Essayer

- (CGRect)frame
{
    if (CGRectIsEmpty(_frame)) 
    _frame = CGRectMake(0,0,60,60);

    return _frame;
}
10
Anupdas

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
0
Andrew DeClerck