首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何返回NSJsonSerialization

如何返回NSJsonSerialization
EN

Stack Overflow用户
提问于 2018-01-12 19:22:40
回答 1查看 397关注 0票数 0

首先,我对目标C一无所知。

也就是说,下面的代码应该是从AsyncStorage获取数据。

我已经为Android做了类似的工作,其基本思想是以Json对象的形式从AsyncStorage获取数据。

我现在需要的是使用jsonFromLocalRNStrogeForKey内部的callInviteReceived

jsonFromLocalRNStrogeForKey https://stackoverflow.com/a/47389561/1958882

代码语言:javascript
复制
+(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

代码语言:javascript
复制
- (void)callInviteReceived:(TVOCallInvite *)callInvite {    
    NSJsonSerialization json = [self.jsonFromLocalRNStrogeForKey];
    // json.user.name
    [self reportIncomingCallFrom:@json.user.name withUUID:callInvite.uuid];
}

这些方法应该可以像那样工作

代码语言:javascript
复制
-(NSJsonSerialization)jsonFromLocalRNStrogeForKey: {
    ...
    return json;
}

- (void)callInviteReceived {    
    ...

    NSJsonSerialization json = [self.jsonFromLocalRNStrogeForKey];

    // json.user.name
    [self reportIncomingCallFrom:json.user.name withUUID:callInvite.uuid];
}

有谁能告诉我怎么编码吗?

Using RCTAsyncLocalStorage + getAllKeys

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-12 20:03:45

代码如下所示(您需要提供storageKey参数):

代码语言:javascript
复制
- (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的映射表示。您可以使用此映射提取user.name的值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48232786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档