如何返回 NSJsonSerialization
Posted
技术标签:
【中文标题】如何返回 NSJsonSerialization【英文标题】:How can I return NSJsonSerialization 【发布时间】:2018-01-12 19:22:40 【问题描述】:首先,我对 Objective-C 一无所知。
也就是说,下面的代码应该是从 AsyncStorage 获取数据。
我已经为android 做过类似的事情,其基本思想是从 AsyncStorage 获取数据作为 Json 对象。
我现在需要的是在callInviteReceived
中使用jsonFromLocalRNStrogeForKey
jsonFromLocalRNStrogeForKey source
+(void)jsonFromLocalRNStrogeForKey:(NSString *)key completion:(void (^)(NSDictionary * _Nullable, NSError * _Nullable))completion
RCTResponseSenderBlock rnCompletion = ^(NSArray *response)
NSString *jsonAsString;
if (response.count > 1)
NSArray *response1 = response[1];
if (response1.count > 0)
NSArray *response2 = response1[0];
if (response2.count > 1)
jsonAsString = response2[1];
NSData *jsonAsData = [jsonAsString dataUsingEncoding:NSUTF8StringEncoding];
NSError *error;
NSDictionary *json = [
NSJSONSerialization
JSONObjectWithData:jsonAsData
options:NSJSONReadingMutableContainers
error:&error
];
completion(json, error);
;
RCTAsyncLocalStorage *storage = [RCTAsyncLocalStorage new];
dispatch_async(storage.methodQueue, ^
[storage performSelector:@selector(multiGet:callback:) withObject:@[key] withObject:rnCompletion];
);
callInviteReceived
- (void)callInviteReceived:(TVOCallInvite *)callInvite
NSJsonSerialization json = [self.jsonFromLocalRNStrogeForKey];
// json.user.name
[self reportIncomingCallFrom:@json.user.name withUUID:callInvite.uuid];
这些方法应该像
-(NSJsonSerialization)jsonFromLocalRNStrogeForKey:
...
return json;
- (void)callInviteReceived
...
NSJsonSerialization json = [self.jsonFromLocalRNStrogeForKey];
// json.user.name
[self reportIncomingCallFrom:json.user.name withUUID:callInvite.uuid];
那么,有没有人可以告诉我,如何编码?
Using RCTAsyncLocalStorage + getAllKeys
【问题讨论】:
【参考方案1】:代码如下所示(您需要提供storageKey
参数):
- (void)callInviteReceived:(TVOCallInvite *)callInvite
[self jsonFromLocalRNStrogeForKey:/*storageKey*/ completion:^(NSDictionary* data,NSError* error)
if(data)
NSString * name = [data valueForKeyPath@"user.name"];
if(![name isKindOfClass:[NSNull class]])
[self reportIncomingCallFrom:name withUUID:callInvite.uuid];
else
//handle error
NSLog(@"JSON Parsing Error: %@",error.localizedDescription)
NSJSONSerialization
是一个工具类,负责对 JSON 进行序列化和反序列化。它的所有方法都是类方法,所以将它作为返回值传递是没有意义的。
反序列化的输出是NSDictionary
,它是 JSON 的 Map 表示。您可以使用此 Map 提取 user.name
的值。
【讨论】:
成功了!非常感谢!顺便说一句,您知道是否有特定的storageKey
作为 root 用户吗?因为每次尝试我都会为空。我也试过getAllKeys
,但我不存在。
请更新您的问题以包含您用于getAllKeys
的代码。 getAllKeys
是一个带有RCTResponseSenderBlock
的方法。使用NSLog
打印RCTResponseSenderBlock
中返回的数组的内容。 github.com/gpbl/react-native-blur-example/blob/master/…
当然,刚刚做到了!再次感谢您。
您错误地调用了getAllKeys
。请将此作为单独的问题发布,以避免混乱。您可以在此处粘贴该问题的链接,我会回答。一旦getAllKeys
工作,您将拥有一个密钥列表,您可以在jsonFromLocalRNStrogeForKey:completion
中使用适当的密钥
这里是***.com/questions/48280006/…以上是关于如何返回 NSJsonSerialization的主要内容,如果未能解决你的问题,请参考以下文章