2009-11-07 8 views
1

Chaque fois que j'appelle cette méthode:sélecteur Null envoyé au premier élément de NSMutableArray

- (IBAction)addListItem: (id)sender { 
    NSString *newItemText = [inputField stringValue]; 
    TodoItem *newItem = [[TodoItem alloc] initWithGUID:nil text:newItemText]; 
    [newItem autorelease]; 
    [self willChangeValueForKey: @"list"]; 
    [list addObject: newItem]; 
    [self didChangeValueForKey: @"list"]; 
    [inputField setStringValue: @""]; 
} 

la première instance en TodoItemlist est envoyé un sélecteur nulle, et la console imprime une erreur. Cela arrive deux fois, et ne se produit pas plus quand j'appelle addObject plus d'une fois, ou appelez didChangeValueForKey plusieurs fois. Des idées comment je peux empêcher cela de se produire?

Le message d'erreur est affiché est:
-[TodoItem <null selector>]: unrecognized selector sent to instance 0x11470b0e0

est ici la trace de la pile quand je mis un point d'arrêt dans la méthode [NSObject(NSObject) doesNotRecognizeSelector]:

#0 0x7fff87ea32fa in objc_exception_throw 
#1 0x7fff86c952a0 in -[NSObject(NSObject) doesNotRecognizeSelector:] 
#2 0x7fff86c0f30f in ___forwarding___ 
#3 0x7fff86c0b458 in __forwarding_prep_0___ 
#4 0x7fff831d099b in -[NSObject(_NSBinderKeyValueCodingAdditions) _invokeSelector:withArguments:onKeyPath:] 
#5 0x7fff82e4b171 in -[NSArrayController _invokeMultipleSelector:withArguments:onKeyPath:atIndex:] 
#6 0x7fff82e4a423 in -[NSArrayController _invokeSingleSelector:withArguments:onKeyPath:] 
#7 0x7fff831d08d1 in -[NSObject(_NSBinderKeyValueCodingAdditions) _invokeSelector:withArguments:onKeyPath:] 
#8 0x7fff82e5b4d0 in -[NSBinder _invokeSelector:withArguments:onKeyPath:ofObject:mode:raisesForNotApplicableKeys:] 
#9 0x7fff82e57f3b in -[NSBinder invokeSelector:withArguments:forBinding:error:] 
#10 0x7fff82e3a0ba in -[NSActionBinder _invokeSelector:withArguments:forBinding:] 
#11 0x7fff82e39f20 in -[NSActionBinder _ performActionWithCommitEditing:didCommit:contextInfo:] 
#12 0x7fff82daa259 in _NSSendCommitEditingSelector 
#13 0x7fff82dabbc7 in -[NSController _controllerEditor:didCommit:contextInfo:] 
#14 0x7fff86c1235c in __invoking___ 
#15 0x7fff86c1222d in -[NSInvocation invoke] 
#16 0x7fff86c2df21 in -[NSInvocation invokeWithTarget:] 
#17 0x7fff8363d500 in __NSFireDelayedPerform 
#18 0x7fff86bd9a78 in __CFRunLoopRun 
#19 0x7fff86bd803f in CFRunLoopRunSpecific 
#20 0x7fff84c4bc4e in RunCurrentEventLoopInMode 
#21 0x7fff84c4b9b1 in ReceiveNextEventCommon 
#22 0x7fff84c4b90c in BlockUntilNextEventMatchingListInMode 
#23 0x7fff82be8520 in _DPSNextEvent 
#24 0x7fff82be7e89 in -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] 
#25 0x7fff82bada7d in -[NSApplication run] 
#26 0x7fff82ba6798 in NSApplicationMain 
#27 0x100001211 in main at main.m:13 
+0

Afficher le message d'erreur imprimé. À l'heure actuelle, il peut y avoir plusieurs raisons pour lesquelles cela se produit. – bbum

+0

Quelle ligne génère l'erreur? Parcourez la méthode dans un débogueur pour le savoir. – outis

+0

Aucun d'entre eux. L'erreur se produit après la fin de la méthode. – computergeek6

Répondre

1

Il semble que vous ayez un contrôle dont la propriété target est liée à l'élément todo, mais sans une action de liaison. Si c'est le cas, vous devez utiliser une connexion IB standard pour configurer l'action à la place.

1

(1) Il est difficile de répondre à la question sans en savoir plus sur la classe TodoItem. Comment fonctionne cet initialiseur, par exemple?

(2) Un sélecteur non reconnu conduit généralement à une exception levée. Définissez un point d'arrêt sur objc_exception_throw. Le backtrace devrait vous en dire beaucoup plus sur le contexte de l'erreur.

Questions connexes