NSMutableDictionary SetObject:ForKey:未插入NSDictionary对象

时间:2011-11-26 08:43:41

标签: iphone objective-c ios nsmutabledictionary viewcontroller

过去几天我一直对此感到难过,我对Objective-c有点新鲜。

我在NSUserDefaults中保存了多达3个NSDictionary对象,其中键“one”,“two”和“three”(字典的所有内容都是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 个答案:

答案 0 :(得分:4)

我希望你不要忘记在某处分配/ init serverDict?

答案 1 :(得分:1)

你需要在所有地方使用self.serverDict而不是serverDict,除非在dealloc中释放它,因为它被定义为属性。还要确保在使用它之前分配并初始化self.serverDict(我假设你已经使用它,但是没有使用self.serverDict)。