问题是在将Siri Intent转换为AppIntent时不识别新的处理程序类。如果你在处理程序中更改了类名,则需要按照以下步骤进行操作:
-
在info.plist文件中,确保对应于新类名称的键(例如MyIntentHandlingClassName)值已更新。
-
删除旧的模拟器实例。
-
清除所有derivative data(包括你的app的目录)。
-
重新启动模拟器并安装你的app。
-
现在开始使用新的处理程序类名。
示例代码如下:
//在info.plist文件中:
<key>NSUserActivityTypes</key>
<dict>
<key>MyIntent</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER).MyIntent</string>
<key>MyIntent2</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER).MyIntent2</string>
</dict>
//在 AppDelegate.m中:
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity
restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> *restorableObjects))restorationHandler
{
if ([userActivity.activityType isEqualToString:@"$(PRODUCT_BUNDLE_IDENTIFIER).MyIntent"]) {
NSLog(@"Launching MyIntent.");
}
else if ([userActivity.activityType isEqualToString:@"$(PRODUCT_BUNDLE_IDENTIFIER).MyIntent2"]) {
NSLog(@"Launching MyIntent2.");
}
}
//在MyIntentHandler.m中:
-(void)confirmMy:(MyIntent *)intent completion:(void (^)(MyIntentResponse *response))completion {
MyIntentResponse *response = [[MyIntentResponse alloc] initWithCode:MyIntentResponseCodeSuccess userActivity:nil];
completion(response);
}