2013-03-20 94 views
-1

英语不是我的母语;请原谅打字错误。iPhone从plist获取数据

我看过类似的问题,但我找不到任何可以解决我的问题..

我正在一个iPhone应用程序,显示的音符在表视图列表,用户可以添加和删除注意。

当我添加一个新的注释到服务器时,我得到一个plist中,看起来像这样:

<plist> 
    <dict> 
     <key>success</key><true /> 
     <key>note</key><string>new note</string> 
    </dict> 
</plist> 

用户后轻敲add按钮,我请求到服务器的连接,而我呢,

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{ 
    [resultData appendData:data]; 
} 

然后

-(void)connectionDidFinishLoading:(NSURLConnection *)connection{ 
    NSError *sendError; 
    NSArray *result = [NSPropertyListSerialization propertyListWithData:resultData options: NSPropertyListMutableContainersAndLeaves format:NULL error:&sendError]; 
    if([result count] > 0){ 
     for(NSDictionary *dict in result){ 
      for(NSDictionary *dict in result){ 
       // This gives me an error "objectForKey: unrecognized selector to instance" 
       NSLog(@"%@", [dict objectForKey:@"success"]); 
      } 
     } 
    } 
} 

我认为dict可能不是字典,所以我试过NSLog(@"%@", dict);,它只显示success。但是,我仍然不知道如何获得success的价值。

+0

@Manohar不,这是不正确的,它甚至没有任何关系的问题。 – 2013-03-20 05:38:34

+0

@Manohar什么?我在这个属性列表中看不到一个数组。这是一本字典。 – 2013-03-20 05:42:08

+0

我真的没有plist。添加新笔记时,plist从服务器返回。我应该这样做而不是这个? 'NSArray * result = [NSPropertyListSerialization propertyListWithData:resultData options:NSPropertyListMutableContainersAndLeaves format:NULL error:&sendError];'在这种情况下,我的plist名字应该是什么? – kabichan 2013-03-20 05:43:42

回答

0

方法在NSPropertyListSerialization上的返回值非常合乎逻辑地是您收到的属性列表的根对象。所以result是一个NSDictionary(我甚至不能想象为什么你认为它是一个数组... ...?)。试试这个:

NSLog(@"%@", [result objectForKey:@"success"]); 
+0

@kabichan什么? – 2013-03-20 05:50:19

+0

抱歉,在完成我的评论之前,我错误地输入了错误信息。请看我上面的评论.. – kabichan 2013-03-20 05:52:46

+0

@kabichan你为什么不读我的答案?我的意思是,**完全。**从开始到结束。当您在字典中使用for-in循环时,它将枚举**键**。你不需要任何循环的废话。只要使用'result',就像使用任何正常的字典一样。并尝试获得一些常识,真的。并阅读文档。 – 2013-03-20 05:54:35

1

试试这个::

.h文件中

@property (nonatomic,retain) NSDictionary *dict; 

.m文件

NSString *errorDesc = nil; 
NSPropertyListFormat format; 
NSString *rootPath; 

rootPath = [[NSBundle mainBundle] pathForResource:@"FILE_NAME" 
               ofType:@"plist"]; 

NSData *plistXML = [[NSFileManager defaultManager] contentsAtPath:rootPath];  

dict = (NSDictionary *)[NSPropertyListSerialization propertyListFromData:plistXML mutabilityOption:NSPropertyListMutableContainersAndLeaves format:&format errorDescription:&errorDesc]; 

//NSLog(@"PLIST retrive:%@",plistXML);  
if (!dictLang) { 
    NSLog(@"Error reading plist: %@, format: %d", errorDesc, format); 
} 

获得值::

NSLog(@" Success :: %@", [dict objectForKey:@"success"]); 

希望,它会帮助你。

谢谢。

0
if ([[NSPropertyListSerialization propertyListWithData:resultData options: NSPropertyListMutableContainersAndLeaves format:NULL error:nil] isKindOfClass:[NSDictionary class]]) 
    { 
     NSMutableDictionary *tempDicts = [NSPropertyListSerialization propertyListWithData:nil options: NSPropertyListMutableContainersAndLeaves format:NULL error:nil]; 
    } 
    else if ([[NSPropertyListSerialization propertyListWithData:resultData options: NSPropertyListMutableContainersAndLeaves format:NULL error:nil] isKindOfClass:[NSArray class]]) 
    { 
     NSMutableArray *tempDicts = [NSPropertyListSerialization propertyListWithData:nil options: NSPropertyListMutableContainersAndLeaves format:NULL error:nil]; 
    }