尝试[self.extensionContext openURL:... completionHandler:...];在iOS 8 Share扩展程序中使用以打开包含应用程序永远不会打开应用程序,并始终使用success = NO调用完成处理程序.
以下是Action扩展的相同问题,但我认为Share扩展能够打开包含应用程序比Action扩展更合理.共享扩展的要点是上传一个可能很大的数据,并且在不打开应用程序的情况下执行此操作的唯一方法是通过NSURLSession,这只能执行HTTP(S)上载.但是应用程序可能希望通过与HTTP(S)上载不同的机制来共享内容.
Apple文档未声明openURL...不能用于任何特定类型的扩展.很难知道这是一个错误还是预期的行为.没有关于此的官方信息.
我正在编写自己的自定义键盘.而且我不知道如何将我的设置包(在手机中设置)与我的键盘扩展连接,所以如果有人从手机设置更改设置,之后打开一些文本字段来写一些我的键盘已经知道的内容而不是他所做的更改设置.我试图创建应用程序组以将我的应用程序与我的扩展程序连接,并在我的视图控制器中添加观察者,NSUserDefaultsDidChangeNotification例如:
var notificationCenter = NSNotificationCenter.defaultCenter()
notificationCenter.addObserver(self, selector: "settingsDidChange:", name: NSUserDefaultsDidChangeNotification, object: nil)
Run Code Online (Sandbox Code Playgroud)
当有人在设置settingsDidChange:方法中进行更改时,我将调用我需要阅读的所有内容到我的应用程序组中,以便从我的扩展程序中读取它.但这种方法将只有当人打开我的应用程序调用,所以如果有人改变从手机设置中设定并不会打开的应用程序我的键盘不会改变.那么如何为键盘实现我的设置包呢?
我已经尝试为共享扩展创建自定义视图控制器.
当我在设置的初始视图控制器上呈现另一个视图控制器时,会出现令人困惑的情况MainInterface.storyboard.这个呈现的视图控制器嵌入在导航控制器中(它是它的根视图控制器).
我对presentViewController进行了检查
(lldb) po [self presentingViewController]
<_UIViewServiceViewControllerOperator: 0x7a978000>
(lldb) po [[self presentingViewController] extensionContext]
nil
Run Code Online (Sandbox Code Playgroud)
因此,此时扩展上下文为零.我可以extensionContext通过将它从presentViewController传递给presentViewController来访问它.
但是,我发现这种行为有点奇怪.应用程序扩展是否仅设计为从一级视图控制器层次结构访问?
虽然试图解决这个iOS 8动作扩展图标在设备上是空白的(在模拟器中工作)问题,但我意识到无处可用的信息可以提供iOS 8 Action Extension图标必须具有的大小.此外,技术要求"推荐PNG"和"单色"也不是很清楚.有没有人知道在XCode 6中放置Action Extension图标的位置以及它必须具有的尺寸和格式.
根据文档,更改自定义键盘的高度很简单.这是Apple文档中显示的swift等效版本的代码
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
let constraint = NSLayoutConstraint(item: self.view, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 0.0, constant: 400.0)
self.view.addConstraint(constraint)
}
Run Code Online (Sandbox Code Playgroud)
这确实有效,但它会将高度更改为CONSTANT值,如果更改设备的方向,则该值不可取.在纵向模式下将键盘高度设置为400.0可能没问题,但在横向模式下可能不合适.例如:iPhone 5的标准键盘视图大小为纵向320,216和横向568,162.设置恒定高度会将键盘视图大小更改为纵向的320,400和横向的568,400(实际上是整个屏幕).
我现在唯一想到的是创建一个字典,其中包含每种设备类型和每个方向的键盘视图大小,然后在每次设备更改方向时更新恒定高度约束.有没有人找到更优雅的解决方案?
在我的ios 8键盘扩展中,我想检查用户是否给我的键盘打开访问权限.但我找不到任何API.Swiftkey和其他自定义键盘以某种方式解决了这个问题
我正处于我的小部件开发之间.我们已经将我们的应用程序与小部件集成放在一起 但在现在的某些日子里,我面临着iOS今天的小部件问题.我写了两个案例的代码.第一次在小部件最初首次加载应用程序时,它会调用Web服务并通过Internet获取数据,然后我们将它们存储到用户默认值以供以后使用.
现在,当下次用户下拉通知菜单时,我们首先向用户显示旧的存储内容,然后我们从web-service获取它并以user-default存储,然后再次重新加载表.
对于上述操作,我在某些情况下面临表格内容大小问题,闪烁问题和"无法加载"消息.
现在看一下下面的代码,我在下面的方法中进行网络调用,在web-service的响应之后,我只处理完成处理程序.
- (void)widgetPerformUpdateWithCompletionHandler:(void (^)(NCUpdateResult))completionHandler {
// Perform any setup necessary in order to update the view.
// If an error is encountered, use NCUpdateResultFailed
// If there's no update required, use NCUpdateResultNoData
// If there's an update, use NCUpdateResultNewData
[self getBookedAppointmentsNew:completionHandler];
}
Run Code Online (Sandbox Code Playgroud)
所以,请与我分享您的经验和想法.
ios ios-app-extension ios8-extension ios8-today-widget ios-extensions
这个问题已经被提出,但没有得到答案.
我的iOS应用程序和我的WatchKit扩展程序共享一个应用程序组,其中核心数据存储仍然存在.核心数据模型(简化)是具有Age属性的Person对象.应用和扩展程序都可以随意更改年龄.
如果某人的值在手表上发生变化,则除非我关闭并重新运行该应用,否则该应用不会反映该值.相反的方向相反.
如果我尝试将手表上的年龄更改为20,并将手机上的年龄更改为30,那么我会收到与合并冲突有关的错误,因为我没有使用最新版本的其中一台设备上的NSManagedObject(取决于我最后一次更改的年龄).
如何在没有任何问题的情况下使两者协同工作?
我已经为我的应用程序创建了应用程序共享扩展以共享照片.这是我第一次在共享菜单中打开我的应用程序..当我再次运行应用程序时,即使我的应用程序已启用,之前它未显示在默认共享菜单中像WhatsApp,flickr Facebook,我需要每次打开和关闭我的应用程序以使其可见.
我是否需要在info.plist或我的应用中进行任何更改,以便始终在共享菜单中显示我的应用?
当您completeRequest(returningItems:completionHandler:)从分机呼叫时,主机应用程序在哪里处理?