2013-03-24 47 views
0

林在我的智慧结束在这里,请帮助我你美丽的人!正确组织数据Plist中的数据

我的难题是这样的:

我有100种药物的清单。每个人都有一个名字,每个人都有一个与之关联的网址,每个人都在1-8节。我需要在表格视图中创建药物名称列表。当选择特定药物时,药物名称,其部分及其URL需要传递给另一个视图控制器。

我知道如何实现所有的gubbins传递给另一个控制器,设置表视图等我只是不知道如何组织数据在一个plist文件,以便它可以在程序中访问以及如何保持每种药物链接到其网址和部分。

任何想法?我一直在用字典,数组和对象来搞乱7个小时的最佳过去。我想我可能会哭,如果我不很快排序!

非常感谢,

露西

+0

您是否能连接到使用的plist理由吗?将数据存储在纯文本文件中然后解析它可能会更简单。 – Luke 2013-03-24 21:23:09

+0

没有理由 - 我只是假设这将是最简单的方法来组织它 - 我打开建议,让这个吸盘完成! :) – Giovanni 2013-03-24 21:27:25

回答

0

这里是如何做到这一点:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<array> 
    <dict> 
    <key>name</key><string>Drug name</string> 
    <key>url</key> <string>http://www.urltodrug.com/Drug%20name</string> 
    <key>section</key> <integer>5</integer> 
    </dict> 
</array> 
</plist> 

只需添加更多<dict> S和你做。

把所有到一个数组:

NSString *path = [[NSBundle mainBundle] pathForResource:@"Drugs" ofType:@"plist"]; 
self.dataArray = [NSArray arrayWithContentsOfFile:path]; 

要通过部分和药名的数组排序:

NSArray *sortedArray = [self.dataArray sortedArrayUsingSortDescriptors:@[ 
    [NSSortDescriptor sortDescriptorWithKey:@"section" ascending:YES], 
    [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES] 
]]; 

为了减少阵列只显示名称:

NSArray *namesArray = [sortedArray valueForKeyPath:@"name"]; 

欢迎来到NSDictionary和“Key-Value-Coding”!

要在单元格显示名称:

NSDictionary *dataDict = [self.dataArray objectAtIndex:indexPath.row]; 
cell.textLabel.text = [dataDict objectForKey:@"name"]; 
+0

但我将如何创建一个名单?然后保持名称/网址/部分相互关联,以便在表格视图中选择其中一个项目时,将相关信息传递给新视图控制器?我不知道如何从所有不同的字典中提取所有基于“名称”的项目?对不起... :) – Giovanni 2013-03-24 21:42:29

+0

看到我上面的答案。这样的字典数组不仅可以进行排序,而且可以方便地进行过滤等。但请注意,这不是必需的:只需使用字典中“名称”键中的正确值设置单元格中的标签文本即可。 – Mundi 2013-03-24 21:49:00

+0

Mundi你的一个chuffing天才!我花了整整一天的时间试图在5分钟内完成你所做的事!我永远感谢你,一旦我获得15位以上的代表病态,就会回到这里,并且会像+1按钮上的无名商人一样点击。谢谢:) – Giovanni 2013-03-24 22:52:12