是否可以使用NSUserDefaults在Today Extension上保存和加载数据?关闭通知中心后,窗口小部件的行为类似于终止的应用程序,因此任何数据结果都会丢失.我怎么能解决这个问题?
这是我的代码:
NSUserDefaults *defaults;
- (void)viewDidLoad {
[super viewDidLoad];
defaults = [NSUserDefaults standardUserDefaults];
NSArray *loadStrings = [defaults stringArrayForKey:@"savedStrings"];
if ([loadStrings objectAtIndex:0] != nil) {
[display setText:[NSString stringWithFormat:@"%@", [loadStrings objectAtIndex:0]]];
}
if ([loadStrings objectAtIndex:1] != nil) {
calculatorMemory = [NSString stringWithFormat:@"%@", [loadStrings objectAtIndex:1]].doubleValue;
}
}
- (IBAction)saveData:(id)sender {
NSString *displayString;
NSString *memoryString;
NSArray *saveStrings = [[NSArray alloc] initWithObjects: displayString, memoryString, nil];
defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:saveStrings forKey:@"savedStrings"];
[defaults synchronize];
}
Run Code Online (Sandbox Code Playgroud) 我无法在iOS 8扩展程序和容器应用程序之间共享数据.我从开发门户网站和Xcode设置了这个组,我的权利包括:
<dict>
<key>com.apple.security.application-groups</key>
<array>
<string>my group id</string>
</array>
</dict>
Run Code Online (Sandbox Code Playgroud)
苹果文档中建议使用的解决方案 [[NSUserDefaults standardUserDefaults]
不适合我.
我已经尝试过@Santa Claus在这篇文章中使用App Group进行通信和持久化数据的解决方案
[[NSUserDefaults alloc] initWithSuiteName:@"<group identifier>"];
Run Code Online (Sandbox Code Playgroud)
圣诞老人的解决方案适用于模拟器但不适用于我的iPhone 4s,有关如何使其在真实设备上运行的任何想法?或者我错过了什么?
一些更新:
[[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group id"];
Run Code Online (Sandbox Code Playgroud)
函数返回url,来自容器app和扩展名的两个url看起来都相同,如" path/private/var/mobile/Containers/Shared/AppGroup/3DFB9750-A9F3-4C37-BC3C-0D5BF746B 233".我在容器应用程序中的该文件夹中创建了一个json文件,但是当我在设备上运行时,扩展程序无法在文件夹中找到任何文件.但在模拟器中,它找到了很好,一切正常.
我想在iOS 8中调试今天的视图扩展(小部件),所以我在Xcode的"Scheme"下选择小部件,然后选择我的iPhone作为设备并点击运行.它说"在iPhone上运行今日视图",在左侧的侧栏上显示"等待附加".它永远处于"等待连接"阶段,并且从未在我的iPhone上显示任何调试信息.但是,如果我选择模拟器作为我的设备,这可以正常工作.在模拟器中"等待连接"几秒钟后,小部件变为活动状态并显示调试信息.
有没有人遇到过为什么扩展程序不会在iPhone上显示调试信息但会在模拟器中显示?
我有一个奇怪的问题,我正在尝试构建一个动作扩展,它将从提供的图像中扫描条形码.这是代码.
override func viewDidLoad() {
super.viewDidLoad()
// Get the item[s] we're handling from the extension context.
// For example, look for an image and place it into an image view.
// Replace this with something appropriate for the type[s] your extension supports.
var imageFound = false
for item: AnyObject in self.extensionContext!.inputItems {
let inputItem = item as NSExtensionItem
for provider: AnyObject in inputItem.attachments! {
let itemProvider = provider as NSItemProvider
if itemProvider.hasItemConformingToTypeIdentifier(kUTTypeImage as NSString) {
// This is an image. …Run Code Online (Sandbox Code Playgroud) 我正在创建一个iOS 8自定义键盘扩展,我正在寻找一种方法来确定用户何时切换到另一个输入,以便更改我的布局.
例如,当用户选择UITextField带有类型的UIKeyboardTypeEmailAddressI时,我打算提供自定义键盘,当用户选择UITextField带有类型的另一个时UIKeyboardTypeDecimalPad,我想要注意它,并更新键盘的布局.当键盘类型更改以更新键盘布局时,如何通知?
我正在尝试调试Xcode 6(6A313)上提供的示例Action App Extension.即使应用程序运行完美,我也无法在调试区域看到任何NSLog消息,Xcode也不会在我的断点上停止.
我试过的事情:
我已经用尽了怎么办:)
我正在iOS 8上开发一个应用程序扩展.它有一些特殊功能,只能在特定的主机应用程序上运行.因此,我需要在扩展程序运行时识别主机应用程序,以便我可以确定是否启用该功能.有没有API可以这样做?喜欢获取主机应用程序的应用程序ID?
我正在使用此解决方案(/sf/answers/1805084991/)来检测在Settins应用程序(iOS 8)中激活的所有自定义键盘:
- (void)printoutAllActiveKeyboards {
// Array of all active keyboards
NSArray *keyboards = [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] objectForKey:@"AppleKeyboards"];
for (NSString *keyboard in keyboards)
NSLog(@"Custom keyboard: %@", keyboard);
}
Run Code Online (Sandbox Code Playgroud)
但这对我的项目来说还不够 - 我需要知道用户当前选择哪个自定义键盘进行文本输入.我有研究stackoverflow和其他资源,但没有找到任何解决方案.有没有办法在我的应用程序中检测当前选择的文本输入中的哪个自定义键盘?
谢谢!
我正在iOS 8测试版上开发一个自定义键盘,我想告诉用户如果我的自定义键盘没有启用,如何在包含app中启用它,有没有办法检测到应用程序扩展已启用?
为了通过Apple的新Test Flight服务分发应用程序,beta-reports-active需要提供密钥.目前我正在使用Apple的bot服务器分发到旧的Test Flight系统和Ad Hoc分发配置文件.使用post build触发器我想archive创建它并创建一个App Store Distribution ipa,我可以上传到iTunes Connect.我写了一个脚本来做到这一点.我使用xcrun命令来构建:
/usr/bin/xcrun -sdk iphoneos PackageApplication -v "${APP}" -o "${APP_STORE_IPA}" --sign "${SIGNING_IDENTITY}" --embed "${PROVISIONING_PROFILE}"
这些SIGNING_IDENTITY和PROVISIONING_PROFILE都是应用商店分发证书/配置文件.因此,配置文件嵌入了ipa它并包含beta-reports-active标志.但是,当我查看ipa验证其权利时,它不存在.
我究竟做错了什么?我在此看到的所有信息刚刚建议重新生成配置文件.我已经这样做了,知道钥匙存在.它没有被添加到权利中.我有一个小部件也被捆绑在ipa中.我不是在辞职.
xcode continuous-integration ios provisioning-profile ios-app-extension
ios8 ×8
ios ×7
objective-c ×4
breakpoints ×1
cocoa-touch ×1
iphone ×1
swift ×1
widget ×1
xcode ×1
xcode6 ×1