2011-06-30 63 views
0

我有一个web服务,返回数据到我的客户端应用程序在JSON中。我使用TouchJson然后将这些数据反序列化成一个NSDictionary。大。该字典包含一个关键字“results”,结果包含一个NSArray对象。如何从NSDictionary获取属性?

这些物体看起来像这样在打印时登录即

NSLog(@"Results Contents: %@",[resultsArray objectAtIndex:0 ]); 

输出:

Results Contents: { 
    creationdate = "2011-06-29 22:03:24";   
    id = 1; 
    notes = "This is a test item"; 
    title = "Test Item"; 
    "users_id" = 1; 
} 

我不能确定这个对象是什么类型。我如何从这个对象获取属性和值?

谢谢!

+0

这是一个'NSDictionary',你在'Results'中看到那里。您可以通过查看对象和密钥对来判断。例如,“users_id”是关键字,“1”是对象。 –

+0

这是一个NSDictionary。使用'-objectForKey:'来获取每一个。例如。 'NSString * title = [[resultsArray objectAtIndex:0] objectForKey:@“title”];' –

+0

我打赌他们都是NSStrings,但1可能是NSNumbers - 打印字典时,引号放在字符串,如果它有一个空格,而不是如果没有(因此你不能说1是/不是一个字符串 – bshirley

回答

3

要获取NSDictionary的内容,您必须提供要检索的值的密钥。 I.e:

NSString *notes = [[resultsArray objectAtIndex:0] valueForKey:@"notes"]; 
2

要测试的对象是a类的实例,使用下列之一:

[yourObject isKindOfClass:[a class]] 

[yourObject isMemberOfClass:[a class]] 

要获得对象的类名,你可以使用其中的一个:

const char* className = class_getName([yourObject class]); 

NSString *className = NSStringFromClass([yourObject class]); 

对于NSDictionary,您可以使用-allKeys返回字典密钥的NSArray。这也将让你知道有多少(通过数组count)。一旦你知道的类型,你可以调用

[[resultsArray objectAtIndex:0] objectForKey:keyString]; 

其中keyString@"creationdate"之一,@"notes",等等。然而,如果类不是NSObject子类,则改用:

[[resultsArray objectAtIndex:0] valueForKey:keyString]; 

例如,您可能需要为keystring这样做,等于@"id"

+0

的表示来保持它Objective-C-ish'NSString * className = NSStringFromClass([yourObject class]);' – bshirley

+0

@bshirley:好点;我会更新我的答案 – PengOne