【问题标题】:Read the contents of nested NSMutableDictionaries?阅读嵌套 NSMutableDictionaries 的内容?
【发布时间】:2012-03-14 01:27:16
【问题描述】:

看起来很简单 - 我正在创建一个主 NSMutableDic 并用更多的 NSMutableDic 填充它。

像这样访问字典内容的简单方法是什么? 虽然这不是 Python,但可能达到了 'taskDict[4]['assignedby']' 的程度?

这是运行良好且花花公子的代码:

int counter = 0;

NSArray *cols = [GetProjectInfo getTaskColumns];    
NSArray *rows = [GetProjectInfo fetchAll:projectName];

NSMutableDictionary *taskDict = [NSMutableDictionary dictionary];
NSMutableDictionary *localDict = [NSMutableDictionary dictionary];

for (int x=0; x < rows.count; x++) {

    NSString *rowData = [rows objectAtIndex:x];

    NSString *colData = [cols objectAtIndex:counter];

    //Assign the values colData(key) and rowData(value) into localDict.
    [localDict setValue:rowData forKey:colData];

    counter ++;

    if (counter >= cols.count) {

        counter = 0;

        //Add the whole localDict to the global dictionary (taskDict)
        [taskDict setObject:localDict forKey:localDict];

        //Reset the localDict so that we can populate it with the next set 
        [localDict removeAllObjects];
    }
}

NSLog(@"%@",taskDict);

返回的范围是:

            {
    person = "Ryan";
    assignedby = jfreund;
    complete = False;
    timeassigned = "15:35:00";
} =     {
};
    {
    person = "Tim";
    assignedby = klang;
    complete = True;
    timeassigned = "16:59:07";
} =     {
};

有人愿意向这个方向提出一些想法吗?

【问题讨论】:

  • 很难说你的NSMutableDictionary 实例是如何组成的;但是通过在对象图中构造数据而不是使用NSDictionary 可以更好地解决问题
  • 最后,我计划创建一个 plist,然后将其用作一种存储形式和一种填充视图的方式。将数据结构化为对象图是什么意思?

标签: objective-c loops for-loop nsarray nsmutabledictionary


【解决方案1】:

这并不能直接回答您的问题;但不是将您的对象图存储为嵌套字典,您是否可以使用NSObject 子类来封装您的数据,这样您就不必遍历字典的层次结构?例如,(请注意,我对您的应用程序的模型层一无所知...)您能否将概念模型分解为 Project 和 Task 对象,例如

@interface Task : NSObject <NSCoding>
{
    NSString *_name;
    NSString *_owner;
    NSString *_assignedBy;
    BOOL _complete;
    NSDate *_timeAssigned;
    //  etc.
}

然后项目又由任务组成:

@interface Project : NSObject <NSCoding>
{
    NSString *_name;
    NSString *_dateStarted;
    NSMutableArray *_tasks;
    //  etc.
}

这是一种更面向对象的方式来构建应用程序的模型层。只要您的类符合NSCoding 协议,这种机制就不会阻止您将数据序列化为plist。

【讨论】:

  • 啊,是的,这是一种更好的做事方式。我试图在我的方法中偷工减料以快速制作原型,但我会尝试以这种方式完成它。谢谢你的建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-09
  • 1970-01-01
  • 1970-01-01
  • 2020-02-15
  • 1970-01-01
  • 2020-10-17
  • 1970-01-01
相关资源
最近更新 更多