通过上述方法请求XML项目字典时出现以下错误:
> NSLocalizedDescription=The UIApplicationDelegate in the iPhone App never called reply() in -[UIApplicationDelegate application:handleWatchKitExtensionRequest:reply:]
我毫不费力地传递了一个由NSStrings的NSMutableArray组成的NSDictionary。
从接口控制器:
- (void) requestFeedsFromPhone
{
[WKInterfaceController openParentApplication:@{@"request":@"feeds"}
reply:^(NSDictionary *replyInfo, NSError *error) {
// the request was successful
if(error == nil) {
// get the array of items
NSMutableDictionary *tempDictionary = replyInfo[@"feeds"];
NSLog(@"tempDictionary: %@", tempDictionary[@"feedsArray"]);
self.feeds = tempDictionary[@"feedsArray"];
[self setupTable];
}
else{
NSLog(@"ERROR: %@", error);
}
}];
}
在应用程序委托中:
- (void) application:(UIApplication *)application
handleWatchKitExtensionRequest:(NSDictionary *)userInfo
reply:(void (^)(NSDictionary *))reply
{
MasterViewController *mainController = (MasterViewController*) self.window.rootViewController;
//this is the troublesome line - calling this method results in the error
NSDictionary *feedsDictionary = [mainController returnFeedsDictionary];
reply(@{@"feeds": feedsDictionary});
}
在MasterViewController中:
-(NSDictionary *) returnFeedsDictionary
{
NSURL *url = [NSURL URLWithString:@"http://www.nasa.gov/rss/dyn/lg_image_of_the_day.rss"];
SeparateParser *separateParser = [[SeparateParser alloc] initWithURL:url];
[separateParser parse];
NSArray *tempArray = [separateParser returnFeeds];
return @{@"feedsArray": tempArray};
}
returnFeeds
方法返回NSMutableDictionarys的NSMutableArray,其中填充了NSMutableStrings(标题,链接,imageURL等)。我假设我的问题是我的某些数据不符合属性列表,但我认为数组,字符串和字典是可以接受的。
最佳答案
您正在击中Law of Leaky Abstractions。
您的iPhone-App和WatchKit-Extension作为两个单独的进程和两个单独的沙箱运行。 OpenParentApplication / handleWatchKitExtensionRequest / reply机制只是Apple提供的一种用于包装进程内通信的便捷机制。
抽象泄漏:
回复(feedsDictionary)
返回的字典只能包含
如果您的返回字典包含超出此范围的任何内容,例如自定义
类实例,然后您得到那个糟糕的错误,说reply()是
从来没有打电话,即使你做到了!
解决方案1 :序列化您的对象并将其从“应用程序到手表”发送,然后在手表上反序列化(也称为“编组/解组”)。
解决方案2 :简单地传递一个字符串作为Key,并在Watch Extension中实例化您的对象(而不是传递胖对象实例本身)
关于ios - Watchkit-应用程序:handleWatchKitExtensionRequest错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30060914/