Sie sind nicht klar zu sein, was nicht funktioniert, aber ein paar Dinge, die offensichtlich falsch sind (JonLOo könnte aber genau richtig sein) ...
Erstens. Sie verwenden die falschen Methoden, oder zumindest gibt es eine bessere - setValue:forKey:
sollte/könnte stattdessen setObject:forKey:
sein. Dies könnte einer der Gründe für Ihr Problem sein.
Zweitens. Sie verteilen und verteilen nicht richtig. dictCategories2
in Ihrem viewDidLoad
wird in den leeren verschwinden und bringen Sie den zugewiesenen Speicher für dictCategories
in der getCategories
Methode definiert. Eine einfache Standard-Lösung für dieses ist
NSMutableDictionary *dictCategories = [[NSMutableDictionary alloc] init];
in getCategories
in
NSMutableDictionary *dictCategories = [NSMutableDictionary dictionary];
Es letztere Methode durch das System Autoreleased wird sich ändern.
Drittens. Sie möchten unter nachlesen. Anstelle von getFoo, setBar, verwendet der Ob-C-Standard @properties, um Setter- und Getter-Methoden zu definieren. Sie können diese dann überschreiben, um bei Bedarf Standarddaten in Ihre Methoden einzufügen. Sie möchten (wahrscheinlich) auch das Wörterbuch in Ihrer Schnittstelle als Instanzvariable speichern, anstatt es ständig zu löschen. Beispiel für eine Implementierung, die @property tut dies:
@interface foo {
NSMutableDictionary *ingredients;
}
@property (nonatomic, retain) NSMutableDictionary *ingredients;
@end
// ....
@implementation foo
@synthesize ingredients;
// ...
// the @synthesize command above will create getter and setter methods for us but
// we can override them, which we need to do here
- (NSMutableDictionary *)ingredients
{
if (ingredients != nil) {
// we've already got an ingredients variable so we just return it
return ingredients;
}
// we need to create ingredients
ingredients = [[NSMutableDictionary alloc] init];
[ingredients setObject:@"foo" forKey:@"bar"]
return ingredients;
}
Im viewDidLoad Methode (oder anderswo, wo man ingredients
vielleicht denken noch nicht initialisiert worden sind), würden Sie tun, zum Beispiel
NSMutableDictionary *dict = self.ingredients;
Überall sonst können Sie entscheiden, nur ingredients
ohne self
zu verwenden, aber wenn es gleich Null ist, wird Ihre Methode nie aufgerufen werden, und Sie werden nil
auf dich geworfen zu bekommen.
Dies ist in vielen Fällen nützlich und notwendig, wenn wir die Zutaten von außerhalb unserer Klasse lesen oder schreiben möchten. Es ist außerhalb dessen, worüber du fragst, aber ich habe es angesprochen, weil du versuchst, etwas ähnliches mit self.getCategories
zu tun.
Hoffe, dass hilft.