【问题标题】:Why I am not able to replace the NSMutableString value in foundCharacters method of NSXMLParser in objective c?为什么我无法替换目标 c 中 NSXMLParser 的 foundCharacters 方法中的 NSMutableString 值?
【发布时间】:2017-03-27 18:15:14
【问题描述】:

我是 iOS 新手,我遇到了关于替换 NSXMLPerserfoundCharacters 方法中的字符串值的问题。

我的代码是这样的

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{  
    myMutableStringassignedObj=[[NSMutableString alloc]initWithString:string];
    NSLog(@"Array String: %@",myMutableStringassignedObj);
    myMutableStringassignedObj = [[myMutableStringassignedObj stringByReplacingOccurrencesOfString:@"&"
                                         withString:@"and"] mutableCopy];//I am changing string like this but it not working
    NSData *data = [myMutableStringassignedObj dataUsingEncoding:NSUTF8StringEncoding];
    responseassigneddict = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
    NSLog(@"JSON DATA = %@",responseassigneddict);
}

由于 & 它给了我空值。有什么办法可以改变它。提前致谢!

【问题讨论】:

  • 不清楚你到底想要什么!
  • @Lion 我需要替换字符串的内容。
  • @Lion 是的。
  • 请给出字符串的内容以及你想从那个字符串中得到什么。
  • @NarendraPandey String 内容为:B&C 3,4,1 号大堂区,通道区和单元号-1502 至1504 号楼梯没有灯光依赖电梯通道区没有灯光。跨度>

标签: ios objective-c nsxmlparser


【解决方案1】:

用这个替换你的字符串修改方法

[myMutableStringassignedObj replaceOccurrencesOfString:@"&" withString:@"and" options:NSLiteralSearch range:NSMakeRange(0, myMutableStringassignedObj.length)];

之后,将字符串放入 NSArray 或 NSDictionary。

NSArray *array = @[myMutableStringassignedObj];

这里的问题是:您没有从NSData 对象解码jsonDatajsonData 应始终以 ArrayDictionary 开头。在这里,您将NSString 转换为NSData 并尝试使用NSJSONSerialization 对其进行解码。因此,您会因此而遇到错误。我检查了错误代码。

因此,要将NSData 解码为jsonObject/Foundation Object,您应该将字符串放入NSArrayNSDictionary,然后使用NSJSONSerialization 将其转换为NSData

NSData *data = [NSJSONSerialization dataWithJSONObject:array options:NSJSONWritingPrettyPrinted error:nil];
NSError *error;
id responseassigneddict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error];
NSLog(@"JSON DATA = %@",responseassigneddict);

编辑:

如 cmets 中所述,请使用 XMLParser 库来解决此问题。

【讨论】:

  • 什么也没发生。
  • 我发现了你的问题
  • 请告诉我。
  • 请查看我的回答
  • @muju 这是编码问题。尝试我的解决方案一次。希望它会奏效。
【解决方案2】:

这是对具有特殊字符的数据进行编码的问题。直接使用下面的行代码,而不是替换 & 或任何特殊字符。

NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLKMNOPQRSTUVWXYZ0123456789"];

NSString *encodedData = [myMutableStringassignedObj stringByAddingPercentEncodingWithAllowedCharacters:set]];

NSData *data = [encodedData dataUsingEncoding:NSUTF8StringEncoding];

【讨论】:

  • 我声明 NSCharacterSet *set;在 .h 文件中,然后从 NSString 编写代码。
  • 使用这个 NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLKMNOPQRSTUVWXYZ0123456789"];并删除您声明的 NSCharacterSet 对象。
  • 现在它给了我空值
  • 先转换成数据,放入字典中。 NSData *data = [NSJSONSerialization dataWithJSONObject:[NSArray arrayWithObject:myMutableStringassignedObj] 选项:NSJSONWritingPrettyPrinted 错误:无]; NSError *错误; id responseassigneddict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error]; NSLog(@"JSON DATA = %@",responseassigneddict);
【解决方案3】:
 NSMutableString *String = [[NSMutableString alloc]initWithString:@"B&c"];

    [String replaceOccurrencesOfString:@"&" withString:@"and" options:NSRegularExpressionSearch range:NSMakeRange(0, String.length)];
    NSLog(@"string after replacing %@",String);

输出:

string after replacing `Bandc`

【讨论】:

    【解决方案4】:

    你可以这样做,

      NSString *string = @"hello & hello";
    
     NSString *result = [string stringByReplacingOccurrencesOfString:@"&" withString:@"and"];
    
    NSLog(@"result : %@",result);
    

    没有必要将其转换为mutable string

    【讨论】:

    猜你喜欢
    • 2011-04-02
    • 2016-11-18
    • 1970-01-01
    • 1970-01-01
    • 2018-07-06
    • 1970-01-01
    • 1970-01-01
    • 2018-04-22
    • 2019-10-22
    相关资源
    最近更新 更多