I had called an interface of Baidu to check id Number, however the value of Sex returned with sex = M
, without "" around the M
in JSON, when I use NSString
in module to store it and then print the class name of this sex
property, it printed as NSTaggedPointerString
, I doubt how to convert it to a String to use it. Anyone have good ideas?
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
NSTaggedPointerString
is already an NSString
, it's just a subclass. You can use it anywhere you can use an NSString
, without conversion.
回答2:
I have encountered places where it cannot be used as a string, such as when creating an NSDictionary. In those cases use stringWithString:
:
NSString* <# myNSString #> = [NSString stringWithString:<# myNSTaggegedString #>];
回答3:
I had this same issue multiple times. It would seem that type inference for NSDictionary is not an exact science. What I do is specifically ask if the object responds to a particular method. For example if I am looping through parsing some JSON and I am attempting to access a value of type NSString
:
NSString * string;
if ([[dict objectForKey:@"value"] respondsToSelector:@selector(stringValue)]) {
string = [[dict objectForKey:@"value"] stringValue];
}
else {
string = [NSString stringWithString:[dict objectForKey:@"value"]];
}
documentFile.documentRevision = string;
回答4:
In my case son {"count":"123"} I got error. Solved:
// Data was created, we leave it to you to display all of those tall tales!
// NSLog(@«data: %@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
NSDictionary * json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
if ([json isKindOfClass:[NSDictionary class]]){ //Added instrospection as suggested in comment.
NSArray *dicArray = json[@"count"];
NSLog(@"=:%@", dicArray);
}
回答5:
for Swift 3 or 4
String(stringInterpolationSegment: taggedPointerString)