2011-02-18 52 views
0

我有一些代码,看起来像这样:崩溃错误帮助的NSString

NSString *_parse = [NSString stringWithFormat:@"//%@",_user]; 
NSString *_status = [Parser parse:_parse:@"status"]; //parses the xml 
if ([_status isEqualToString:@"1"]) { //error here 
} 

应用程序崩溃时,它会检查,如果两个字符串相等。然而,当我更换的代码与此第一线能正常工作:

NSString *_parse = [NSString stringWithFormat:@"//user1"]; 

但不使用“用户”伊娃,我需要使用,因为值可以是不同的。 ivar“用户”是一个NSString,声明较早[self setUser:@"userX"]; 我应该怎么做才能解决这个问题?由于

编辑:这里是解析XML代码:

+ (NSString *)dataFilePath:(BOOL)forSave { 

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     NSString *documentsDirectory = [paths objectAtIndex:0]; 
     NSString *documentsPath = [documentsDirectory stringByAppendingPathComponent:@"hangout.xml"]; 
      return documentsPath;  
    } 
    + (MyViewController *)parse:(NSString *)nodesForPath:(NSString *)elementsForName { 

     NSString *filePath = [self dataFilePath:FALSE]; 
     NSData *xmlData = [[NSMutableData alloc] initWithContentsOfFile:filePath]; 
     NSError *error; 
     GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:xmlData options:0 error:&error]; 
     if (doc == nil) { return nil; } 
     MyViewController *view = [[[MyViewController alloc] init] autorelease]; 
     NSArray *getVersionInfo = [doc nodesForXPath:nodesForPath error:nil]; 
     for (GDataXMLElement *versionInfo in getVersionInfo) { 
      NSArray *elm1 = [versionInfo elementsForName:elementsForName]; 
      GDataXMLElement *elm2 = (GDataXMLElement *) [elm1 objectAtIndex:0]; 
       return elm2.stringValue; 
     } 

     [doc release]; 
     [xmlData release]; 
     return view; 
    } 
+0

请发布应用程序崩溃时获得的错误消息以及设置_user变量的代码。 – Jim 2011-02-18 21:34:02

回答

2

的主要问题是在你的parse:nodesForPath:elementsForName:方法。找到正在查找的元素时,它会返回NSString(在循环中)。当你不要找到你正在寻找的元素时,它退出循环并返回一个MyViewController的实例。显然你不能将视图控制器与一个字符串进行比较,这样会导致崩溃。

这是莫名其妙的。你为什么要这样做?它在返回之前不会在任何地方使用。在那里有代码是没有意义的。完全删除对MyViewController的引用。从您的parse:nodesForPath:elementsForName:方法返回nil。如果没有释放分配的内存或内存会泄漏,请不要在循环内过早返回。你之前的回报还有另外一个漏洞。