与手表套件扩展和iPhone应用程序通信

时间:2014-11-21 08:38:26

标签: ios objective-c iphone

我尝试将数据从iPhone应用程序发送到手表套件扩展程序但失败了。 并且不知道该怎么做。

我在模拟器上测试并通过应用程序组发送数据。

这是我的步骤:

  1. 从Apple下载手表套件目录示例应用程序
  2. 为iPhone应用添加应用程序组(XXX.XXX.XXX)和wtach套件扩展
  3. 为NSExtensionAttributes添加RequestOpenAccess:YES(监视工具包扩展名)
  4. 向iPhone应用程序添加一个按钮,该按钮将使用特定的套件名称向NSUserDefaults写入值
  5. 在watchkit扩展中添加代码以读取NSUserDefaults数据。 ([NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:)

  6. 运行监视工具包应用

  7. 手动点击iPhone模拟器中的目录应用
  8. 点击第4步添加的按钮
  9. 在watchkit扩展中添加断点以查看NSUserDefaults值是否已更改
  10. 什么都没发生
  11. 我想念什么必要的东西?

    或者我应该用另一种方法来做到这一点?

    我想做的就是每隔几秒钟从iPhone发送数据。 数据可以是字符串或图像。

    由于

2 个答案:

答案 0 :(得分:1)

要设置iPhone和iWatch之间的通信,我一直将文件放入共享应用程序组文件夹,并从Watch扩展程序监视它。如果iPhone应用程序有任何更改,它会修改该文件,并会通知Watch扩展程序并对其进行操作。

答案 1 :(得分:1)

你需要:

  1. 在两个目标(iPhone和Watch扩展程序)上创建一个应用程序组。确保它已添加到apple developer portal上的应用ID上(有时它不会从Xcode中传递出来)。

  2. 从iPhone应用程序写入应用程序组:

    NSString *destFolderPath = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:
                               @"YOUR_GROUP_STRING"].path;
    [UIImageJPEGRepresentation(image, 1.0) writeToFile:[destFolderPath stringByAppendingPathComponent:@"Your_Shared_File_Name.jpg"] atomically:YES];
    
  3. 从扩展程序中读取文件:

    UIImage *image;
    NSURL *groupURL = [[NSFileManager defaultManager]
                   containerURLForSecurityApplicationGroupIdentifier:
                   @"YOUR_GROUP_STRING"];
    
    NSString *imagePath = [groupURL URLByAppendingPathComponent:@"Your_Shared_File_Name.jpg"].path;
    }
    
    if( [[NSFileManager defaultManager] fileExistsAtPath: imagePath]){
        image = [[UIImage alloc] initWithContentsOfFile: imagePath];
    }
    
  4. 一般情况下,我建议您使用MMWormhole ,如果您不需要在Watch和Host应用之间传递任何过于复杂的内容,则可以轻松使用