Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios openParentApplication:答复:包含应用程序的异步网络调用出错_Ios_Objective C_Networking_Restkit_Watchkit - Fatal编程技术网

Ios openParentApplication:答复:包含应用程序的异步网络调用出错

Ios openParentApplication:答复:包含应用程序的异步网络调用出错,ios,objective-c,networking,restkit,watchkit,Ios,Objective C,Networking,Restkit,Watchkit,我在使用Watchkit应用程序时遇到错误。当我启动它时,我要求包含iOS的应用程序从网络获取一些数据。问题是,我得到一个错误,说包含的应用程序从不调用“reply()”:o但看看我的代码,它应该调用它 我试着调试从openParentApplication到'reply()'调用的每一步,它似乎在=X时运行良好 这是我在Watchkit扩展中的代码 - (void)initDiaporamasWithSuccess:(void (^)())success andFailure:(void (^

我在使用Watchkit应用程序时遇到错误。当我启动它时,我要求包含iOS的应用程序从网络获取一些数据。问题是,我得到一个错误,说包含的应用程序从不调用“reply()”:o但看看我的代码,它应该调用它

我试着调试从openParentApplication到'reply()'调用的每一步,它似乎在=X时运行良好

这是我在Watchkit扩展中的代码

- (void)initDiaporamasWithSuccess:(void (^)())success andFailure:(void (^)(NSError*))failure {
NSLog(@"Ask to load diapos");
__weak typeof(self) weakSelf = self;
[WKInterfaceController openParentApplication:@{@"watchKit": @"watchKit.initDiapos"} reply:^(NSDictionary *replyInfo, NSError *error) {
    if (error) {
        NSLog(@"%@", error);
        if (failure) {
            failure(error);
        }
        return;
    }

    NSLog(@"got items : %@", replyInfo[@"diapos"]);
    weakSelf.diaporamas = replyInfo[@"diapos"];
    [weakSelf setDiaporama:replyInfo[@"firstDiapo"] AtIndex:0];
    if (success) {
        success();
    }
}];
}

结果应该是一个NSDictionary,其中包含一个NSArray和一些Diporamas基本信息,以及一个object(Dipo),其中包含第一个Diporama的全部信息(例如self.Diporamas[0])

下面是包含应用程序的AppDelegate中的代码:

- (void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void (^)(NSDictionary *))reply {
// Maybe we could handle multiple watchKit extension calls that way ?
// Something like a key-value 'protocol' to run the right block of code
NSString *watchKitCall = userInfo[@"watchKit"];
NSLog(@"watchKit handled");

if ([watchKitCall isEqualToString:@"watchKit.initDiapos"]) {
    [AppDelegate watchInitialObjects:^(NSDictionary *info) {
        NSLog(@"Managed to get initial infos");
        reply(info);
    } failure:^(NSError *error) {
        NSLog(@"Fail : %@", error);
        reply(@{@"error": error});
    }];
}
}

}

在watchKitHandler中,我调用watchInitialObjects来获取Diporamas数组和第一个Diporama的信息。 在watchInitialObjects中,我进行了第一次网络调用以获取阵列,成功后,我进行了另一次网络调用以获取第一个Diporama信息

为了进行调用并将JSON映射到对象中,我使用RESTKit

我真的不明白什么可能是错误=x

更新

我忘了写我得到的错误,这里是:

Error Domain=com.apple.watchkit.errors Code=2“iPhone应用程序中的UIApplicationLegate从未在中调用过reply()”-[UIApplicationLegate应用程序:handleWatchKitExtensionRequest:reply:“UserInfo=0x7fcb53e12830{NSLocalizedDescription=iPhone应用程序中的UIApplicationLegate从未在中调用过reply()-[UIApplicationLegate应用程序:handleWatchKitExtensionRequest:回复:]

我一直想知道我为什么会犯这个错误,我想我找到了: 在包含的应用程序中似乎有(很少)超时来完成工作。但是我在包含的应用程序中直接映射了我收到的JSON数据,然后在reply()中发送这些自定义对象。但是当我删除映射部分时,它工作得很好

所以…这就是为什么我认为这就是问题所在=X
有人能赞同我的想法或纠正我吗?

经过数小时的搜索和测试不同的代码,我终于发现了我的问题……当我们阅读苹果公司关于“应用程序:handleWatchKitExtensionRequest:回复”的文档时,这一点显而易见

答案如下:(在文档中)

字典的内容必须可序列化为属性列表文件

这意味着对象只能是字典、数组、字符串、数字(整数和浮点)、日期、二进制数据或布尔值


…我觉得很笨>还有其他错误详细信息吗?手表有超时,应用程序没有及时回复吗?我希望苹果能就此给出更好的错误消息!!
+ (void) watchInitialObjects:(void (^)(NSDictionary *info))success failure:(void (^)(NSError *error))failure {
NSDictionary *parameters = @{@"site" : @(14), @"limit" : @(10)};
[AppDelegate  requestDiapoListWithParams:parameters success:^(NSArray *items) {
    if ([items count] == 0)
    {
        NSError *error = [NSError errorWithDomain:@"com.domain.app" code:404 userInfo:nil];
        failure(error);
        return;
    }

    Diapo *firstDiapo = [items firstObject];
    [AppDelegate requestDiapoDetailWithDiapo:firstDiapo success:^(Diapo *diapo) {
        if (!diapo)
        {
            NSError *error = [NSError errorWithDomain:@"com.domain.app" code:404 userInfo:nil];
            failure(error);
            return;
        }

        NSDictionary *result = @{
                                 @"firstDiapo" : diapo,
                                 @"diapos" : items
                                 };
        success(result);
    } failure:^(NSError *error) {
        failure(error);
    }];
} failure:^(NSError *error) {
    failure(error);
}];