2011-05-08 127 views
0

我正在开发一个iphone应用程序,我的意图是从Web服务器检索plist并在tableview中显示结果。iPhone Plist到NSDictionary显示黑屏

我在尝试反序列化plist时遇到了问题。下面的代码编译,但在运行时iphone模拟器屏幕保持黑屏,在我看来,视图永远不会被加载,并且NSLog消息不会显示在控制台中。在另一方面,如果我调试的消息确实会印在控制台,但认为doesn't拿出屏幕保持黑色:

- (void)viewDidLoad { 


NSData *data = [@"<?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\"><dict><key>count</key><array><integer>5</integer></array><key>username</key><array><string>johnsmith</string></array></dict></plist>" dataUsingEncoding:NSUTF8StringEncoding]; 


NSString *error = nil; 

NSPropertyListFormat *format; 

NSMutableDictionary *plist = [NSPropertyListSerialization propertyListFromData:data 
           mutabilityOption:0 
             format: format 
           errorDescription:&error]; 



if (!plist) { 
    NSLog(@"Error reading plist from file, error = '%s'", [error UTF8String]); 
    [error release]; 
} else { 

    NSLog(@"Groovy"); 
    NSLog(@"Count: %d",[plist count]); 
    NSLog(@"Username %@", [plist objectForKey:@"username"]); 
    NSLog(@"Count %@", [plist objectForKey:@"count"]); 
    //[plist retain]; 

} 


//[plist dealloc]; 


[super viewDidLoad]; 
} 

从来就致力于研究和他们说,NSPropertyListSerialization泄漏内存,我我不确定这是否是我的情况。如果你想尝试这段代码,我只是创建一个基于iphone视图的应用程序,并将代码粘贴到(void)viewDidLoad方法中。

任何帮助将不胜感激。

+0

也许我错过了一些东西,但是你没有对反序列化的PLIST做任何事情。另外,是'UIView'的代码部分?如果是这样,你是否实现了'drawRect:'方法或添加子视图? – DarkDust 2011-05-08 09:53:20

回答

0

改变这样的代码:

NSPropertyListFormat format; 

NSMutableDictionary *plist = [NSPropertyListSerialization propertyListFromData:data 
                   mutabilityOption:0 
                     format:&format 
                   errorDescription:&error]; 

即在第一format的前部取出*并添加&到第二个

NSPropertyListFormat不是一个对象,它是一个枚举和propertyListFromData: mutabilityOption:format:errorDescription:希望的指针的NSPropertyListFormat一个实例。

您正在传递未初始化的指针,并且该方法试图写入此“随机”地址。这导致了崩溃。