NSMutableDictionary SetObject: ForKey: не вставляется объект NSDictionary - PullRequest
0 голосов
/ 26 ноября 2011

Я был в тупике с этим последние несколько дней, я немного новичок в цели-c.

У меня есть до 3 объектов NSDictionary, сохраненных в NSUserDefaults с ключами «один», «два» и «три» (все содержимое словарей - строки NSStrings, поэтому должно быть хорошо, что они сохранены в NSUserDefaults ).

Я пытаюсь загрузить эти три NSDictionaries в NSMutableDictionary, когда открывается представление, но по какой-то причине они не добавляются.

@synthesize serverDict;

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [serverDict removeAllObjects];

    NSDictionary *favs;
    NSArray *serverList = [NSArray arrayWithObjects:@"one",@"two",@"three", nil];

    for (id server in serverList) {
        favs = [[NSUserDefaults standardUserDefaults] dictionaryForKey:server];
        if ((favs != nil) && ([favs count] != 0)) {
            [serverDict setObject:favs forKey:server];
            NSLog(@"server:%@, objects in server:%d",server, [favs count]);
            //This outputs:
            //"server:one, objects in server:2"
            //"server:three, objects in server:2"
        }
    }
    NSLog(@"[serverDict count] = %d", [serverDict count]);
    //This outputs:
    //"[serverDict count] = 0"

     for (id key in serverDict) {

     NSLog(@"serverDict key: %@, value: %@", key, [serverDict objectForKey:key]);
     //No Output here
     }
}

Это в .h файле

@interface FavoritesViewController : UITableViewController <UITableViewDelegate, UITableViewDataSource> {
    ...
    NSMutableDictionary *serverDict;
}
@property (nonatomic, retain) NSMutableDictionary *serverDict;

@end

Из комментариев (NSLogs) мы видим, что словари существуют в NSUserDefaults, но они не добавляются в serverDict.

Любая помощь будет оценена !! Я все еще на стадии изучения цели-c ...

Спасибо !!

Ответы [ 2 ]

4 голосов
/ 26 ноября 2011

Надеюсь, вы не забыли где-нибудь разместить / инициализировать serverDict?

1 голос
/ 26 ноября 2011

Вам необходимо использовать self.serverDict везде вместо serverDict, за исключением случаев, когда вы освобождаете его в dealloc, поскольку он определен как свойство. Также убедитесь, что вы выделяете и запускаете self.serverDict, прежде чем использовать его (я предполагаю, что вы уже используете, но не используете self.serverDict).

...