通过上述方法请求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);
}
}];
}
在app delegate中:
- (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
方法返回NSMutableDictionar的NSMutableArray,其中填充了NSMutableStrings(title,link,imageURL等)。
我假设我的问题是我的一些数据不符合属性列表,但我认为数组,字符串和字典是可以接受的。
答案 0 :(得分:4)
你正在点击Law of Leaky Abstractions。
您的iPhone-App和WatchKit-Extension作为两个独立的进程和两个单独的沙箱运行。 OpenParentApplication / handleWatchKitExtensionRequest / reply机制只是Apple提供的一种便利机制,用于包装进程内通信。
抽象泄漏:
应答(feedsDictionary)
返回的字典只能包含
的NSDictionary
如果您的返回字典包含除此之外的任何内容,就像自定义一样 类实例,然后你得到回复()的糟糕错误 从来没有打电话,即使你做了!
解决方案1 :序列化您的对象并从app-to-Watch发送,然后反序列化观察(又称编组/解组)。
解决方案2 :只需传递一个字符串作为Key,并在Watch Extension中实例化您的对象(而不是传递胖对象实例本身)
允许WatchKit Extension针对您的类文件进行编译,方法是单击{class} .m,按下命令+选项+ 1,然后单击" ... WatchKit Extension"目标成员资格下的复选框(无论如何,即使使用解决方案1,也需要执行此操作)
e.g。您的WatchKit扩展将分配/初始化模型的新实例,而不是尝试将其传递到
答案 1 :(得分:1)
在echo '<li>' . '<a target="_blank" href="' . $row['picture_link'] . '">' . $row['picture_text'] . '</a>' . '</li>' . '<br/>';
中,确保按照documentation中的说明启动后台任务。这可以确保iPhone上的主应用程序在发送回复之前不会被暂停。
iPhone主应用程序的app委托中的代码:
handleWatchKitExtensionRequest
答案 2 :(得分:0)
您可以尝试在回复词典中使用NSKeyedArchiver
。我有这个问题,因为数据的序列化问题,这有帮助。