如何在iPhone应用程序和applewatch之间共享数据?

问题描述:

我有一个关于从iPhone应用程序共享数据到苹果手表的问题。我尝试下面的代码来分享NSMutablearray到苹果手表,但它不工作。如何在iPhone应用程序和applewatch之间共享数据?

NSData *encodedObject = [NSKeyedArchiver archivedDataWithRootObject:arrStartScore]; 
NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.test.StartScore"]; 
[defaults setObject:encodedObject forKey:@"WatchHomeViewTableList"]; 
[defaults synchronize]; 

对于检索数据以苹果手表

NSUserDefaults *myDefaults = [[NSUserDefaults alloc]         initWithSuiteName:@"group.com.test.StartScoreCheck"]; 

arrStartScore = [myDefaults objectForKey:@"WatchHomeViewTableList"]; 
NSLog(@"dict....%@",arrStartScore); 
+0

使用AppGroups功能使它能够在能力https://gist.github.com/daniellevass/8eef7c022dff30d730df,http://www.techotopia.com/index.php/Sharing_Data_Between_a_WatchKit_App_and_the_Containing_iOS_App – karthikeyan

+0

嗨,但它崩溃我做了相同你给定的链接。我将数组存储在viewcontroller上的viewdidload中。它的崩溃。终止应用程序由于未捕获的异常“NSInvalidArgumentException”,理由是:“试图插入非财产清单对象( – hirentank

watchOS3已经分居在手表和手机UserDefaults。 AppGroups可以在一个设备内的一个开发人员的应用程序之间共享数据。为了在设备之间传输数据,请使用WatchConnectivity框架。

Documentation

从手机发送的数据看,使用此代码。

WCSession *session = [WCSession defaultSession]; 
NSError *error; 

[session updateApplicationContext:@{@"message": yourArray} error:&error]; 

从手机收到手表的数据:

- (void) session:(nonnull WCSession *)session didReceiveApplicationContext:(nonnull NSDictionary<NSString *,NSMutableArray *> *)applicationContext { 
} 

您可以使用

[applicationContext objectForKey:@"message"]; 

可以使用WatchKit连接框架共享数据访问阵列中didReceiveApplicationContext。有多种方法可以用于背景或交互。

入住这video苹果它解释了所有不同的方式iPhone和手表之间的通信。

此外,您可以创建一个单一类的手表连接并在iOS和WatchOS中使用它。在设备中建立会话并集成委托方法,即可完成。您现在可以从iOS和WatchOS来回发送和接收消息。