2011-05-31 58 views
1
<?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> 
    <array> 
    <string>Title 1</string> 
    <string>Subtitle 1</string> 
    <string>image1.png</string> 
    </array> 
    <array> 
    <string>Title 2</string> 
    <string>Subtitle 2</string> 
    <string>image2.png</string> 
    </array> 
</array> 
</plist> 

这是我正在处理的应用程序的Plist文件。来自Plist的多个阵列

我不知道如何获取多数组的第一个字符串来创建一个包含所有标题和字幕和图像名称的NSMutableArray。

我现在的解决方法是为每种类型的字符串创建3个单独的Plist文件,这可能是一个麻烦。

回答

2

要回答你的问题,同时保留plist中的数据结构,你可以简单地做一些这样的:

NSArray *rootArray = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"your-plist" ofType:@"plist"]]; 
int numItems = [rootArray count]; 
NSMutableArray *titles = [NSMutableArray arrayWithCapacity:numItems]; 
NSMutableArray *subtitles = [NSMutableArray arrayWithCapacity:numItems]; 
NSMutableArray *images = [NSMutableArray arrayWithCapacity:numItems]; 

for (NSArray *itemData in rootArray) { 
    [titles addObject:[itemData objectAtIndex:0]]; 
    [subtitles addObject:[itemData objectAtIndex:1]]; 
    [images addObject:[itemData objectAtIndex:2]]; 
} 

不过,我会建议你使用的结构,如:

<?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>title</key> 
    <string>Title 1</string> 
    <key>subtitle</key> 
    <string>Subtitle 1</string> 
    <key>image</key> 
    <string>image1.png</string> 
    </dict> 
    <dict> 
    <key>title</key> 
    <string>Title 2</string> 
    <key>subtitle</key> 
    <string>Subtitle 2</string> 
    <key>image</key> 
    <string>image2.png</string> 
    </dict> 
</array> 
</plist> 

在这一点上,你可以使用更明确的代码如下:

NSArray *rootArray = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"your-plist" ofType:@"plist"]]; 
int numItems = [rootArray count]; 
NSMutableArray *titles = [NSMutableArray arrayWithCapacity:numItems]; 
NSMutableArray *subtitles = [NSMutableArray arrayWithCapacity:numItems]; 
NSMutableArray *images = [NSMutableArray arrayWithCapacity:numItems]; 

for (NSDictionary *itemData in rootArray) { 
    [titles addObject:[itemData objectForKey:@"title"]]; 
    [subtitles addObject:[itemData objectForKey:@"subtitle"]]; 
    [images addObject:[itemData objectForKey:@"image"]]; 
} 
+0

太好了,我会给它一个去。我正在处理的另一个应用会处理更多的项目,所以我需要这个。 – 2011-05-31 20:54:08

+0

我遇到了一个小问题。我试图从我的uitableview中点击一行时获取图像。标题和副标题的工作和技术上的图像也可以工作,但图像只能在cellForRowAtIndexPath中工作。我需要它在didSelectRowAtIndexPath上工作,但是,应用程序中止并给出了错误NSCFString objectAtIndex无法识别的选择器发送 – 2011-06-01 11:17:08

+0

没关系,我需要保留阵列 – 2011-06-01 11:28:36