2011-05-08 126 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一個實例。

您正在傳遞未初始化的指針,並且該方法試圖寫入此「隨機」地址。這導致了崩潰。