【问题标题】:Crash Error Help NSString崩溃错误帮助 NSString
【发布时间】:2011-02-18 21:30:34
【问题描述】:

我有一些看起来像这样的代码:

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,因为值可能不同。 ivar "user" 是一个 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;
    }

【问题讨论】:

  • 请发布您在应用崩溃时收到的错误消息以及设置_user 变量的代码。
  • 另外,第二行代码包含语法错误。请复制并粘贴确切的代码。
  • @Jim 控制台崩溃时没有错误。我知道它是“isEqualToString”,因为当我拿出它时,应用程序运行良好。
  • 尝试 [_status isEqual:@"1"] 插入 [_status isEqualToString:@"1"] 并放置一个 NSLog(@"%@",_status) gefore cheking isEaqual 查看字符串有什么里面。告诉我结果也许我能帮上忙。
  • @Preston:您通常需要copy 来获取NSString 属性,这取决于。就像我之前说的,您的第二行代码包含语法错误。那不是您正在运行的代码。请发布您正在运行的代码。

标签: iphone objective-c parsing syntax nsstring


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-30
    • 2014-12-12
    • 2016-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多