Reputation: 159
I have a plist uploaded on a server. When I log the array with:
NSLog(@"My Array: %@", topModsArray);
It displays:
"New item 0",
{
curVersion = "1.2.5";
description = "This mod enables you to install other mods, does not modify the gameplay itself, helps other mods to.";
maker = Risugami;
mcVersion = "1.2.5";
name = ModLoader;
rating = 5;
requires = Nothing;
},
"New item 1",
{
curVersion = "3.3.8.153";
description = "This mod is like ModLoader, it allows other mods to be installed and work properly. This adds more capability for developers when making their mods.";
maker = SpaceToad;
mcVersion = "1.2.5";
name = "Minecraft Forge";
rating = 5;
requires = ModLoader;
},
"New item 2",
{
curVersion = "1.2.5";
description = "This mod gives capability for clients to use certain mods and for servers to be modded.";
maker = Flan;
mcVersion = "1.2.5";
name = ModLoaderMP;
rating = 5;
requires = ModLoader;
},
"New item 3",
{
curVersion = "3.6.2";
description = "This mod adds much more mobs to minecraft, making the game more fun and enjoyable. (Be warned it adds much more hostile mobs, and in the water)";
maker = DrZhark;
mcVersion = "1.2.5";
name = "Mo' Creatures";
rating = 5;
requires = "ModLoader, Minecraft Forge, GUI API and CustomMobSpawner";
},
"New item 4",
{
curVersion = "3.1.5";
description = "This mod makes minecraft more realistic with pipes, quarrys, machines, and much more. If you want your minecraft to be more realistic, this is a must have mod.";
maker = "SirSengir (Now Opensource)";
mcVersion = "1.2.5";
name = Buildcraft;
rating = 5;
requires = "ModLoader and Minecraft Forge";
}
Which is what I want it to display, however when I try to add the name key to a UITableView with this:
cell.textLabel.text = [[topModsArray objectAtIndex:indexPath.row] objectForKey:@"name"];
My app crashes with SIGABRT:
2012-06-27 12:54:37.765 MinePedia[72019:f803] -[__NSCFString objectForKey:]: unrecognized selector sent to instance 0x6c8bad0
2012-06-27 12:54:37.766 MinePedia[72019:f803] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString objectForKey:]: unrecognized selector sent to instance 0x6c8bad0'
*** First throw call stack:
(0x13bd052 0x154ed0a 0x13beced 0x1323f00 0x1323ce2 0x3424 0xade0f 0xae589 0x99dfd 0xa8851 0x53301 0x13bee72 0x1d6792d 0x1d71827 0x1cf7fa7 0x1cf9ea6 0x1d8530c 0x25530 0x13919ce 0x1328670 0x12f44f6 0x12f3db4 0x12f3ccb 0x12a6879 0x12a693e 0x14a9b 0x2868 0x27c5)
terminate called throwing an exceptionsharedlibrary apply-load-rules all
Current language: auto; currently objective-c
(gdb)
Please help me
Upvotes: 0
Views: 177
Reputation: 2253
see make one array in your .h and alloc it in view did load and and use that to show your table, make your array like this...
for(int i =0 ;i <topModsArray.count ; i++ ){
id object = [topModsArray objectAtIndex:i];
if([object isKindOfClass:[NSMutableDictionary class]] || [object isKindOfClass:[NSDictionary class]]){
NSMutableDictionary *dict = (NSMutableDictionary *)object;
[yourArray addObject:dict];
}
now return number of row is yourArray.count and in your cellForRowAtIndexPath:
NSMutableDictionary *dict = [yourArray objectAtIndexPath:indexPath.row];
cell.titleLabel.text = [dict objectForKey:@"name"];
use this may this help you
Upvotes: 1
Reputation: 31016
Your array is composed of alternating strings and dictionaries. The object at offset zero is "New item 0", which doesn't have an objectForKey:
method. You need to select the items from your array that you actually want to display (...or index them using something like indexPath.row * 2 + 1
).
Upvotes: 0