2012-06-06 89 views
1

我嘗試使用代碼NSKeyedUnarchiver unarchiveObjectWithFile導致死機

-(bool)checIfWorksOnJailbreak; 
{ 

    NSString *s = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Info.plist"]; 

    NSLog(@"%@",s); 

    if([[NSFileManager defaultManager] fileExistsAtPath:s]) { 


     NSDictionary *plistDictionary = (NSDictionary*)[NSKeyedUnarchiver unarchiveObjectWithFile:s]; 


     NSString *valueString = [plistDictionary objectForKey:@"SigerIdentity"]; 
     if([valueString isEqualToString:@"Apple OS Application Signing"]) 
      return true; 
     else 
      return false; 
    } 

    return false; 

} 

它總是會導致錯誤

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', 
reason: '*** -[NSKeyedUnarchiver initForReadingWithData:]: 
incomprehensible archive version (-1)' 

在行

NSDictionary *plistDictionary = (NSDictionary*)[NSKeyedUnarchiver unarchiveObjectWithFile:s]; 

歡迎任何評論

+0

爲什麼這會得到downvoted?這是一個合法的問題。 – Sean

回答

3

NSKeyedUnarchiver(和NSKeyedArchiver)不用於編碼和解碼plists。相反,它們用於序列化和反序列化實現協議的對象。要將你的plist數據讀入字典,你應該使用:

NSDictionary *plistDictionary = [NSDictionary dictionaryWithContentsOfFile:s];