2

背景:

在我的 iPhone 应用程序中,我检索图像并将它们保存到文档目录以便更快地加载。我知道要在 Apple Watch 上使用这些图像,我必须与 App Group 共享它们。

所以,我创建了一个应用程序组,更新了我的配置文件,所有这些爵士乐。现在我的问题是我不知道如何将图像保存到 App Group 并在我的 WatchKit 文件中读取该图像。

这是我尝试将图像保存到应用程序组的方法:

NSString *container = @"group.com.appName.watchdatasharing";

NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:container];

[defaults setValue:UIImagePNGRepresentation([FileManager readImageFromFileWithName:@"icon1_imgUrl"]) forKey:@"icon1_imgUrl"];
  • 注意:我的 FileManager 类返回一个 UIImage

为了在我的 WatchKit 应用程序中检索图像,我使用以下代码:

NSString *container = @"group.com.fantrac.watchdatasharing";

NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:container];

NSData* imageData = [defaults valueForKey:@"icon1_imgUrl"];
UIImage* image = [UIImage imageWithData:imageData];

[tableRow.iconImage setImage:image];

问题:

我在 Apple Watch 上测试时没有显示图像。我需要做些什么来保存/检索我的应用程序和 Apple Watch 之间的图像?

4

3 回答 3

5

如果您使用 watchOS 2,则可以使用 WatchConnectivity。我附上一个示例代码供您参考。

在 iPhone 上:

// Create a Watch Connectivity session
- (void)viewDidLoad
{
    [super viewDidLoad];

    self.applicationDict = @{@"foo" : @"bar"};

    if ([WCSession isSupported]) {
        WCSession *session = [WCSession defaultSession];
        session.delegate = self;
        [session activateSession];
    }
}

// Transfer file to Apple Watch 
- (IBAction)fileTransferButtonTapped:(id)sender
{
    // File Transfer
    NSURL *url = 
    [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"sample" ofType:@"png"]];
    WCSessionFileTransfer *fileTransfer = 
    [[WCSession defaultSession] transferFile:url
                                    metadata:self.applicationDict];
}

观看:

// Receive file from iPhone
- (void)session:(nonnull WCSession *)session didReceiveFile:(nonnull WCSessionFile *)file
{
    // recieve file
}

参考。 http://www.kristinathai.com/watchos-2-how-to-communicate-between-devices-using-watch-connectivity/

于 2015-10-16T23:56:14.433 回答
3

如果您希望多个应用程序访问同一个“沙箱”,则回答原始问题,您的选项可能包括 AppGroups。

使用应用组允许多个应用访问共享容器并允许应用之间进行额外的进程间通信

在这里,您可以在配置应用程序组部分找到如何配置应用程序组的信息。

配置 AppGroup 并为您的应用添加正确的权利后,您可以使用以下代码访问公共容器:

NSString * kSharedAppGroup = @"group.com.appName.watchdatasharing";

+ (NSURL*)commonStoreUrl {
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSURL *modelDestUrl = [[fileManager containerURLForSecurityApplicationGroupIdentifier:kSharedAppGroup] URLByAppendingPathComponent: kStoreName];
    return modelDestUrl;
}

用法:

NSURL *commonContainer = [Someclass commonStoreUrl];

如果您的应用程序需要访问公共数据库,这将很有用,无论如何,如果您的场景只是从手表到 iOS 应用程序的琐碎信息,请使用 WCSession。(仅自 watchkit 2.2 起可用)

于 2017-08-01T11:01:08.707 回答
0

对于 Swift3

这将是-

let sharedFolderURL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.your.app")! as URL
于 2017-10-27T07:16:10.363 回答