2010-05-13 1 views
1

Je suis vraiment gratter la tête sur celle-ci:Mon objet devient NSCFArray lors de l'exécution sur iPhone

J'ai un objet (MyObject) que j'instancier, et cet objet a une variable membre NSArray.

Le code simple suivant travail dans la sim:

MyObject *myObj = [[MyObject alloc] init]; 
NSArray *arr = [myObj myMemberArray]; 

Quand je passe la souris sur myObj dans XCode l'infobulle lit "MyObject". Bien! Mais quand je débogue sur le périphérique (OS 3.1.3) je reçois: "[NSCFArray myMemberArray]: sélecteur non reconnu envoyé à l'instance ..." Lorsque je survole myObj, il est certain qu'il lit "NSCFArray".

Quelqu'un peut-il me donner quelques indications sur où aller avec cela? Merci.

+0

Oh mon dieu! Je l'ai corrigé. Ma méthode init ne s'est pas retournée. Cela soulève maintenant la question suivante: Toute idée de pourquoi cela a fonctionné dans la simulation, mais pas sur l'appareil? – cagreen

Répondre

1

Comment ça marche dans la carte SIM et non sur l'appareil?

Probablement sur la carte SIM, il se trouve qu'il a été laissé dans le registre qui est utilisé pour renvoyer des valeurs, éventuellement depuis quand vous avez appelé self = [super init]; L'iPhone a une architecture de processeur différente et le code machine généré a quitté le tableau dans le registre utilisé pour retourner la valeur, pas soi-même. Dans les paramètres d'avertissements du compilateur, vous devez toujours définir -Wall dans les autres drapeaux d'avertissement. Vous devez également activer le paramètre d'analyseur statique (j'oublie où il se trouve - il se trouve quelque part dans les paramètres de construction de la cible). Ces deux paramètres vous permettent de détecter ce problème lors de la compilation.

0

Est-ce que myMemberArray est défini n'importe où dans MyObject?

- (void) {} ​​myMemberArray dans MyObject

Questions connexes