2010-09-18 2 views
2

Je viens juste d'apprendre l'objectif c ayant une petite expérience Java et ce site m'a vraiment aidé à répondre à mes nombreuses questions, mais j'ai rencontré un problème que je n'arrive pas à comprendre. Il y a pas mal de choses à lire sur le sujet mais je n'arrive pas à trouver où je me suis trompé.Une variable globale de classe régulière est partagée entre des instances d'objet - help!

Je lis ceci:

Objective C ne soutient toutefois pas membres de données de classe (à savoir des données partagées par tous les objets de la même classe), ils peuvent être émulés par l'utilisation du modificateur statique. Par exemple, déclarer une variable static int count dans le fichier d'implémentation de la classe Employee entraînerait la partition de tous les objets Employee partageant une seule variable entière.

Mais je semble avoir fini avec cette fonctionnalité sans essayer ... et je ne le veux pas!

Le scénario est que j'ai une catégorie de UIImageView dans laquelle je déclare une variable globale (juste en dessous de ma ligne @implementation) pour compter un événement particulier et l'utiliser dans mes nouvelles méthodes.

@implementation UIImageView (Draggable)  
int touchesCount = 0;  
// methods ... 

Tout fonctionne correctement si j'ai un seul UIImageView. Cependant quand je crée et ajoute une deuxième instance de UIImageView cette variable de compte est partagée entre les deux donnant un comportement inattendu.

Figure il peut être pertinent de montrer comment je crée les objets:

UIImageView *myImageView = [[UIImageView alloc] initWithFrame:myImageRect]; 
UIImageView *myImageView2 = [[UIImageView alloc] initWithFrame:myImageRect]; 
// ... (create, manipulate and set 2 images to the 2 views) 
[self.view addSubview:myImageView]; 
[self.view addSubview:myImageView2]; 

Autre que cela, des suggestions sur l'endroit où je pourrais aller mal?

Merci!

Editer: Pour illustrer un peu plus ce que je fais avec les 2 vues, dans ce cas est un ViewController.

Répondre

2

Ce que vous cherchez sont variables d'instance, mais les catégories ne peuvent pas les ajouter à une interface Apple:

Notez que la catégorie ne peut pas déclarer des variables d'instance supplémentaires pour la classe; il comprend seulement des méthodes.

Vous devez utiliser inheritance à la place:

@interface MyView : UIImageView { 
    int touchesCount; 
} 
// ... 
@end 
+0

J'ai modifié mon code par votre suggestion et il travaille maintenant comme prévu. Merci de votre aide. – Faylen

Questions connexes