2016-02-12 34 views
0

我想遍歷NSDictionary並將該字典中的所有值添加到對象。所以我將新的可可類文件添加到我的項目中,並將其與NSObject進行了分類。 (把它命名爲customClass) 在我的自定義class.h:迭代NSDictionary以將值添加到對象

- (void)printDir;  // iterate through the direcory and print it. 

@property (nonatomic, retain) NSMutableDictionary *objDictionary; 

在customClass.m printDir方法的認定中是:

- (void)printDir { 
    _objDictionary = [[NSMutableDictionary alloc ]init]; 
    for(id key in _objDictionary) { 
    id value = [_objDictionary objectForKey:key]; 
    NSLog(@"Values in Objects Dictionary"); 
    NSLog(@"%@",value); 
    } 
} 

在我ViewController.mi正嘗試通過迭代NSDirectory並將該目錄的所有值添加到該對象的NSMutableDictionary。對於這,

for(id key in jsonDictionary.allKeys) { 
    id value = [jsonDictionary objectForKey:key]; 
    [obj.objDictionary setObject:value forKey:key]; 
} 

當我運行該項目的對象printDir方法被調用,但for循環不執行。有人可以指出我哪裏出錯了。謝謝。

+0

檢查字典是否爲空或包含值? – Signare

+0

jsonDictionary包含很多鍵值,所以這不是問題。 –

+2

實際上你是否[[alloc] init]有一個新的'NSMutableDictionary'並且在任何時候都將它賦值給'objDictionary'?如果不是,它將是零,因此'setObject:'不會做任何事情。你也可以直接說'obj.objDictionary = [[NSDictionary dictionaryWithDictionary:jsonDictionary] mutableCopy]' – Paulw11

回答

0
_objDictionary = [[NSMutableDictionary alloc ]init]; 

更改這一行你printDir方法來初始化您的自定義類的方法。現在的問題是每當您到達printDir方法時,它都會將_objDictionary重新分配爲零。所以循環將不執行

0

在printDir功能你分配一個字典objDictionary再次....所以過來向右您的視圖控制器的實際值耗材....你只需要改變你的函數這個 在.h文件中

- (void)printDirwithDictionary :(NSMutableDictionary *)dict; 

而且在.m文件

- (void)printDirwithDictionary:(NSMutableDictionary *)dict { 
    _objDictionary = [[NSMutableDictionary alloc] initWithDictionary:dict] 
    for(id key in _objDictionary) { 
    id value = [_objDictionary objectForKey:key]; 
    NSLog(@"Values in Objects Dictionary"); 
    NSLog(@"%@",value); 
    } 
} 

在ViewController.m按照此代碼

NSMutableDictionary *dictToPass = [[NSMutableDictionary alloc]init]; 
    for(id key in jsonDictionary.allKeys) { 
     id value = [jsonDictionary objectForKey:key]; 
     [dictToPass setObject:value forKey:key]; 
    } 
    [obj printDirWithDictionary:dictToPass]; 

而從視圖控制器調用將是這樣的 然後按照相同的程序。希望這會正常工作。