【发布时间】: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