如何创建动态NSDictionary来存储多个具有多个键的URL?

时间:2015-10-29 13:14:12

标签: ios objective-c nsdictionary

我想用它的名字,websitename和rssfeed网址存储多个网址。 如何将其存储在字典中?

喜欢,

我的关键是,@"nameoffeed", @"websitename", @"urlfeedname"我想将所有内容存储在与url相关的词典中。 像用户搜索3 feed那么名称,websitename和urlfeed都存储在NSDictionary中?

我该怎么做?

我正在使用它,但它只存储了1个值。

  //newdevice1 is my nsmanageobject
 NSArray *keys = [[[newDevice1 entity] attributesByName] allKeys];
                        NSDictionary *singledict = [newDevice1 dictionaryWithValuesForKeys:keys];

我在字典中需要这种类型的结果。

{
    nameoffeed = "cnn" ;
    websitename = "www.cnn.com";
    urlfeedname = "www.cnn.com/feed";

     nameoffeed = "nytimes" ;
    websitename = "www.nytimes.com";
    urlfeedname = "www.nytimes.com/feed";
}

3 个答案:

答案 0 :(得分:1)

你可以这样做。

NSDictionary *dic = @{@"nameoffeed":@"cnn",@"websitename":@"www.cnn.com",@"urlfeedname":@"www.cnn.com/feed"};
NSDictionary *dic2 = @{@"nameoffeed":@"nytimes",@"websitename":@"www.nytimes.com",@"urlfeedname":@"www.nytimes.com/feed"};
NSArray *dicArray = @[dic,dic2];

答案 1 :(得分:0)

在Dictionary中我们可以保存或存储多个键值。但它必须是不同的键。键名不能相同。如果使用在词典中存储相同的键名,它会显示错误或您的应用程序崩溃。但是你可以在字典中使用相同的值。你必须存储具有多个相同值的不同键名。

您可以将保存字典集保存到数组中,如下所示

NSDictionary *dictFirstSet = [[NSDictionary alloc]initWithObjectsAndKeys:@"cnn",@"nameoffeed",@"www.cnn.com",@"websitename",@"www.cnn.com/feed",@"urlfeedname",nil];
NSDictionary *dictSecondSet = [[NSDictionary alloc]initWithObjectsAndKeys:@"nytimes",@"nameoffeed",@"www.nytimes.com",@"websitename",@"www.nytimes.com/feed",@"urlfeedname",nil];
NSArray *arrayDict = [[NSArray alloc]initWithObjects:dictFirstSet,dictSecondSet,nil];
NSLog(@"The arrayDict is - %@",arrayDict);

输出

  The arrayDict is - (
    {
    nameoffeed = cnn;
    urlfeedname = "www.cnn.com/feed";
    websitename = "www.cnn.com";
},
    {
    nameoffeed = nytimes;
    urlfeedname = "www.nytimes.com/feed";
    websitename = "www.nytimes.com";
}
) 

答案 2 :(得分:0)

  

我的关键是,@“nameoffeed”,@“websitename”,@“urlfeedname”我想要   将所有内容存储在与url相关的字典中。就像用户搜索3那样   name,websitename和urlfeed都存储在NSDictionary中?

基于此,我相信你想要一本字典词典,其中每个子词典都用名字索引。

在您的示例中,您已使用dictionaryWithValuesForKeys为单个对象创建字典。

您需要做的就是通过网址键将每个字体添加到字典中。

首先,您需要一个可变字典来将项目添加到...

NSMutableDictionary *byURL = [[NSMutableDictionary alloc] init];

然后,对于每个项目,抓住您将用作关键字的“网址”......

NSString *name = [newDevice1 valueForKey:@"nameoffeed"];

并将值添加到词典

if (name) {
    NSArray *keys = [[[newDevice1 entity] attributesByName] allKeys];
    byURL[name] = [newDevice1 dictionaryWithValuesForKeys:keys];
}

然后,您可以为每个对象执行相同的操作,从而生成一个字典,您可以通过URL查找每个对象。

NSDictionary *d = byURL[@"cnn"];

将为您提供包含“cnn”

的所有键/值对的字典

如果你想最终得到一个严格用于搜索的不可变字典(在添加你要添加的所有内容之后),你可以创建一个不可变的副本......

NSDictionary *objectsByURL = [byURL copy];