2010-05-22 6 views
0

J'ai une classe personnalisée de type NSObject qui contient un seul NSMutableArray. Cette classe s'appelle Mutable2DArray et est conçue pour émuler un tableau à deux dimensions de type NSMutableArray. Il existe une méthode init personnalisée - (id) initWithX: (int) x Y: (int) y qui demande les dimensions pour le tableau et alloue les tableaux requis dans le seul tableau dont la classe est propriétaire.Problème lors de la copie de l'initialisation de classe personnalisée

Mon problème est que lorsque j'essaie de copier une instance de Mutable2DArray, j'obtiens une erreur indiquant que copyWithZone est un sélecteur non reconnu. Je pensais que la copie était une méthode de base NSObject donc je suis confus pourquoi je ne peux pas créer une copie de l'instance comme ceci:

Mutable2DArray *Array1 = [[Mutable2DArray alloc] initWithX:10 Y:10]; 
Mutable2DArray *Array2 = [Array1 copy]; 

Suis-je manque quelque chose si évident?

Répondre

0

choses que je peux penser à vérifier, du haut de ma tête:

  1. Est-ce que le fichier d'en-tête en fait l'interface déclarer comme héritant de NSObject?
  2. Est-ce que votre méthode personnalisée initWithX: Y: appelez [super init] avant de terminer?
+0

Oui, l'en-tête définit la classe comme héritant de NSObject et la méthode d'initialisation appelle [super init] – Parad0x13

+0

Mes excuses, j'aurais dû vérifier les docs en premier. De la référence NSObject: > NSObject ne prend pas lui-même en charge le protocole NSCopying. Les sous-classes doivent supporter le protocole et implémenter la méthode copyWithZone: Une version de sous-classe de la méthode copyWithZone: doit envoyer le message à super en premier, pour incorporer son implémentation, sauf si la sous-classe descend directement de NSObject. – Endemic

Questions connexes