【发布时间】:2014-11-04 09:01:01
【问题描述】:
在定义 NSDictionary 时如何确保键值对的位置?
例如,如果我定义:
[detailsView setDatasource: @[
@[@"Details",
@{ @"title_1":@"description1",
@"title_2":@"description2",
@"title_3":@"description3",
@"title_4":@"description4" }],
@[@"Actions",
@{ @"Action_1":[NSNull null],
@"Action_2":[NSNull null],
@"Action_3":[NSNumber numberWithBool:false] }]
];
然后在运行时我有不同的项目顺序
[detailsView setDatasource: @[
@[@"Details",
@{ @"title_2":@"description2",
@"title_3":@"description3",
@"title_4":@"description4",
@"title_1":@"description1" }],
@[@"Actions",
@{ @"Action_3":[NSNumber numberWithBool:false],
@"Action_1":[NSNull null],
@"Action_2":[NSNull null]}]
];
这种行为是不可预测的... NSDictionary 在用字面量初始化时是如何初始化的,有没有办法确保键值对在使用字面量时位于定义的位置?
-- 编辑--
不是一个出色的解决方案,但有效。我最终这样做了:
@[
@[ @"Route details",
@[
@[@"route-direction", @"Route direction", [NSString stringWithFormat:@"%@ → %@", journey[@"from"], journey[@"to"]]],
@[@"poi-count", @"Points of interest", journey[@"pois-count"]],
@[@"date-created", @"Date created", journey[@"created-at"]],
]
],
@[ @"Actions" ,
@[
@[@"favourite", @"Favourite", ( [journey objectForKey:@"favourite"] ? [journey objectForKey:@"favourite"] : [NSNumber numberWithBool:false])],
@[@"load",@"Load now",[NSNull null]],
@[@"delete",@"Delete",[NSNull null]],
]
],
[NSNumber numberWithInteger: indexPath.row]]];
【问题讨论】:
-
您的问题没有任何意义,只要您仅通过 键(
–valueForKey:或–valueForKeyPath:)访问 值,所以元素的实际顺序真的无关紧要。无论如何,你想达到什么目标? -
我想要一个 ViewController 来显示属性和动作,不同的选定项不同,在不同的 tableViews 中。我设置属性和值,然后对具有选择器名称的项目可用的操作。对于操作,我可能需要在所有操作之后显示“删除”操作。
标签: ios objective-c object-literal