标签: watchkit

如何获取watchOS 2中的当前位置?

我需要在watchOS 2中获取WatchKit App的用户当前位置.我该怎么办?

location objective-c apple-watch watchkit watchos-2

20
推荐指数
1
解决办法
3366
查看次数

如何在WatchKit tableview中重新加载数据?

我有一个带有Tableview的iPhone应用程序,其数据来自CoreData.

在此输入图像描述

相同的数据也会显示在观看应用中:

在此输入图像描述

如果我从iPhone应用程序中添加一行:

在此输入图像描述

我在Watch应用程序中重新加载数据:

在此输入图像描述

我看到旧行空了!

在此输入图像描述

如果停止手表应用程序并重新启动它,一切都会正确显示!

在此输入图像描述

这是在Watch应用程序中填充Tableview的代码

-(void)awakeWithContext:(id)context{
    [super awakeWithContext:context];
       [self loadTable];
}

-(void)loadTable{
    NSLog(@"loadTableData");
    NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Data"];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Data"
        inManagedObjectContext:managedObjectContext];
    [fetchRequest setEntity:entity];

    NSSortDescriptor *sortByDate = [[NSSortDescriptor alloc] initWithKey:@"sortedDateAndTime" ascending:NO];
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortByDate, nil];
    [fetchRequest setSortDescriptors:sortDescriptors];
    self.watchMArray = [[managedObjectContext executeFetchRequest:fetchRequest error:nil] mutableCopy];

  //  [self.watchTableView setRowTypes:self.watchMArray];
    [self.watchTableView setNumberOfRows:self.watchMArray.count withRowType:@"data"];

    for (NSInteger i = 0; i < self.watchMArray.count; i++)
    {
        WatchTableCell *cell = [self.watchTableView rowControllerAtIndex:i];
        NSManagedObject *data = …
Run Code Online (Sandbox Code Playgroud)

iphone core-data ios watchkit wkinterfacetable

19
推荐指数
2
解决办法
9645
查看次数

在iphone和Apple手表之间共享课程

我希望有人可以对此有所了解.我尝试过研究,却找不到任何东西......

有没有办法在iPhone应用程序和Apple Watch扩展程序之间共享一个类?

让我们说在手表扩展中我有一堂课myClass; 我无法在手机应用程序中使用此类.反正有没有绕过这个?

swift watchkit

19
推荐指数
3
解决办法
6841
查看次数

WatchKit和UIAlertView/UIAlertController弹出窗口

在我的WatchKit应用程序中,当用户首次启动它时,我想向他们提供一个有用的消息提醒,告诉他们应用程序的工作方式,例如按钮的功能等.

是否有类似于UIAlertView/UIAlertController的东西我可以在WatchKit应用程序中调用?我无法找到关于这个主题的答案,这很可能意味着它不可能.

ios watchkit

19
推荐指数
2
解决办法
9988
查看次数

WatchKit错误 - 无法找到实例化的接口控制器类''

每当我在我的子类中建立任何连接时,WKIInterfaceController我都会WatchKit error - unable to find interface controller class 'myClass' to instantiate在模拟器中显示错误和活动指示器,并且视图不会加载.断开所有连接并正确显示视图但仍然出现错误

试着

无法找到接口控制器类'InterfaceController'来实例化

WatchKit:无法找到接口控制器类

WatchKit reloadRootControllersWithNames导致错误,使用pageController或push/pop之后

两个链接提示一个错误,如果它是一个错误,这肯定不会出现在XCode的发布版本上,并且每个人都会遇到相同的行为呈现watcKit几乎没用?

objective-c ios apple-watch watchkit

19
推荐指数
4
解决办法
1万
查看次数

无效的捆绑包,捆绑包包含不允许的嵌套捆绑包,包含不允许的文件"框架"

我添加了一个共享框架,用于在app和watch扩展之间共享代码.后来我删除了共享框架,因为它会导致很多问题.我可以在iphone上构建和运行我的应用程序并观看.但是当我提交到app store时,我看到了这两个错误:

ERROR ITMS-90205:"无效的捆绑包.'xxx WatchKit Extension.appex'的捆绑包含不允许的嵌套捆绑包."

ERROR ITMS-90206:"无效的捆绑包.'xxx WatchKit Extension.appex'包含不允许的文件'Frameworks'."

我已经尝试了stackoverflow上提到的所有解决方案(这个,这个,这个)它们都不适用于我.我该如何修复错误?来自苹果的错误消息实际上并不能说明我应该做些什么.

ios cocoapods watchkit

19
推荐指数
4
解决办法
9366
查看次数

有没有办法从Apple Watch访问加速度计?

它看起来并不像今天发布的WatchKit包含这样的API.

accelerometer ios watchkit

18
推荐指数
3
解决办法
7417
查看次数

如何保证主机应用程序和扩展程序使用的共享应用程序容器中的Core Data存储中的唯一条目?

为了有效地提出我的问题,我们首先考虑一下我面临的确切情况:

常规设置

  • 主机iOS 8应用程序.
  • 与主机应用程序捆绑在一起的一个或多个iOS 8扩展(WatchKit,Share等).
  • 主机应用程序和所有扩展程序在共享应用程序组容器中共享相同的Core Data SQLite存储.
  • 每个app/extension都有自己的NSPersistentStoreCoordinator和NSManagedObjectContext.
  • 每个持久性存储协调器使用持久性存储,该存储在组容器中与所有其他持久性存储共享相同的SQLite资源.
  • 应用程序和所有扩展使用公共代码库来同步Internet上远程API资源的内容.

导致问题的事件顺序

  1. 用户启动主机应用程序.它开始从远程API资源获取数据.核心数据模型对象基于API响应创建,并"upserted"到主机应用程序的托管对象上下文中.每个API实体都有一个uniqueID,用于在远程API后端中标识它.通过"upsert",我的意思是,对于每个API实体,主机应用程序仅在无法找到给定唯一ID的现有条目时在Core Data中创建新条目.

  2. 同时,用户还启动了一个主机应用程序的扩展.它也可以从同一个远程API执行某种提取.它还尝试在解析API响应时执行"upsert".

  3. 问题:如果主机应用程序和扩展程序同时尝试为同一API实体插入Core Data条目,会发生什么?要了解这是如何产生的,让我们看看upsert的事件序列:

核心数据Upsert序列:

  1. API解析代码解析给定API实体的uniqueID.
  2. 解析器为与谓词匹配的任何条目执行核心数据提取,其中谓词uniqueID等于已解析的唯一ID.
  3. 如果找不到现有条目,则解析器会为此API实体插入新的Core Data条目,将其uniqueID属性设置为已解析的uniqueID.
  4. 解析器保存托管对象上下文,该上下文将新条目数据下推到SQLite后备存储.

问题详情

假设主机应用程序和扩展程序同时独立地解析同一API实体的API响应.如果主机应用程序和扩展程序在它们中的任何一个完成步骤4之前到达步骤3,则它们都将尝试为相同的唯一ID插入新的核心数据条目.当他们到达步骤4并调用save:他们各自的托管对象上下文时,Core Data将很乐意创建重复的条目.

据我所知,Core Data没有任何方法可以将属性标记为唯一.我需要一个等同于SQLite INSERT OR IGNORE+ UPDATE组合的核心数据..或者我需要一种方法来"锁定"持久存储的SQLite后备存储,这听起来像是一个麻烦的方法.

对iOS 8扩展引入的这个相当新颖的问题有一个已知的方法吗?

sqlite core-data ios watchkit ios-extensions

18
推荐指数
2
解决办法
3032
查看次数

如何使用WatchKit触发通知

WatchKit开发人员指南中,有关于如何呈现自定义通知的说明,它还说:

应用不需要执行任何操作来支持通知.系统提供默认通知界面,显示通知中的警报消息.但是,应用程序可以自定义通知界面,并包括自定义图形,内容和品牌.

我可以获取本地通知以在手机上触发横幅提醒,但WatchKit应用程序上不会发生这些通知.我尝试使用所有目标进行调试:

  1. iOS应用
  2. 观看应用
  3. 观看一瞥
  4. 观看自定义通知

即使手机应用程序在后台,当收到本地通知时似乎都没有触发.我也通过模拟在后台收到的远程通知来尝试这个.

我希望我不必直接调用watchKit的控制器本地/远程通知处理程序.

ios apple-watch watchkit

18
推荐指数
2
解决办法
1万
查看次数

为什么我的WatchKit扩展程序中的应用程序组不起作用?

我已经看过关于在主机应用和应用扩展之间共享NSUserDefaults数据的所有其他帖子,但我仍然无法工作.以下是我所做的一切:

  1. 在Xcode的"功能"选项卡上为扩展和主机应用启用应用组.
  2. 将组名设置为"group.com.mycompany.foo",并确认扩展名和主机应用程序已添加到组中.
  3. 已确认两者都存在权利文件,并且"com.apple.security.application-groups"键设置为我的应用程序组名称.(对于它的价值,我也使用扩展和主机应用程序之间的共享钥匙串功能,这是有效的 - 所以我不认为这是权利问题)
  4. 重新生成所有配置文件.事实上,我甚至撤销了所有证书,并在设置应用程序组后重新生成了所有配置文件.

毕竟,这段代码仍然不起作用:

// in the host app
NSUserDefaults *testDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.mycompany.foo"];
[testDefaults setObject:@"TEST" forKey:@"foo"];
[testDefaults synchronize];
Run Code Online (Sandbox Code Playgroud)

然后:

// in the extension
NSUserDefaults *testDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.mycompany.foo"];
NSLog(@"%@", [testDefaults objectForKey:@"foo"]);
Run Code Online (Sandbox Code Playgroud)

这导致:

(null)
Run Code Online (Sandbox Code Playgroud)

当我查看Xcode首选项时,我注意到这些图标,其中没有一个具有"App Group"图标: Xcode首选项 - 权利

但正如我之前所说,我在设置应用程序组后清除了我的钥匙串,证书和配置文件.因此,如果这实际上是问题,我如何将权利添加到配置文件?

我错过了什么?我是新鲜的想法.

救命?

编辑:访问组正在我的今日和Safari扩展中工作,而不是在WatchKit扩展中.我不知道为什么,并且所有构建设置似乎都以相同的方式配置.

编辑2:对于那些坚持我的功能设置不正确的人,这里有一个截图:功能

nsuserdefaults ios ios-app-extension ios-app-group watchkit

18
推荐指数
1
解决办法
6197
查看次数