相关疑难解决方法(0)

使用应用程序组在应用程序之间传递和保存数据

iOS 8昨天发布了一个关于App Groups的新API.在分享数据和在应用程序之间进行通信之前,它有点混乱,我相信这正是App Groups要纠正的内容.

在我的应用程序中,我启用了应用程序组并添加了一个新组,但我找不到任何有关如何使用它的文档.文档和API参考仅说明如何添加组.

那么App Group真正打算做什么呢?有没有关于如何使用它的文件?

objective-c ios ios8 ios-app-extension

81
推荐指数
5
解决办法
5万
查看次数

在iOS 8共享扩展程序和主应用程序之间共享数据

最近,我一直在制作一个简单的iOS 8共享扩展来了解系统的工作原理.正如Apple在其App Extension编程指南中所述:

默认情况下,您的应用及其扩展程序无法直接访问彼此的容器.

这意味着扩展程序和包含应用程序不共享数据.但在同一页面上,Apple带来了一个解决方案:

如果您希望包含应用及其扩展能够共享数据,请使用Xcode或Developer门户为应用及其扩展启用应用组.接下来,在门户中注册应用程序组,并指定要在包含的应用程序中使用的应用程序组.

然后,可以使用NSUserDefaults在包含应用程序和扩展程序之间共享数据.这正是我想做的.但由于某种原因,它不起作用.

在同一页面中,Apple建议使用标准默认值:

var defaults = NSUserDefaults.standardUserDefaults()
Run Code Online (Sandbox Code Playgroud)

在WWDC演示文稿(217)中,他们提出了一个共同的方案:

var defaults = NSUserDefaults(suiteName: kDefaultsPackage)
Run Code Online (Sandbox Code Playgroud)

此外,我为包含应用目标和扩展目标的应用组启用了相同的应用组名称: XCode目标功能,应用程序组

但所有这些设置都是无用的.我无法从扩展程序中检索存储在包含应用程序中的数据.就好像两个目标正在使用完全不同的NSUserDefaults存储.

所以,

  1. 这种方法有解决方案吗?
  2. 如何在包含应用和共享扩展之间共享简单数据?数据只是API的用户凭据.

swift xcode6 ios8 ios-app-extension

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

NSUserDefault无法在iOS8中的Extension中保存和加载

我需要将数据保存到NSUserDefault我的iOS自定义键盘中.我已经在开发人员门户网站中成功创建了应用程序组和权利XCode.

以下是我如何使用UISwitch保存我的价值

- (IBAction)switchAction:(id)sender
{
    [self.defaults setBool:self.myKey.on forKey:@"myValue"];

    [self.defaults synchronize];
}
Run Code Online (Sandbox Code Playgroud)

这是我如何在KeyboardView中加载值.

self.defaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.mycompany.customkeyboard"];

if([self.defaults boolForKey:@"myValue"])
{
    self.backgroundColor = [UIColor redColor];
}

else
{
    self.backgroundColor = [UIColor blackColor];
}
Run Code Online (Sandbox Code Playgroud)

它不起作用,也没有加载价值.

我如何保存和加载数据?

nsuserdefaults ios ios8 ios-app-extension ios-app-group

5
推荐指数
1
解决办法
4432
查看次数

带有SuiteName的NSUserDefaults可以在模拟器上运行,但它不在设备上

我真的不知道如何处理这个问题.我正在创建一个键盘扩展,我需要在我的应用程序和我的插件之间共享一些数据.我正在尝试使用NSUserDefaults.

我的申请中有以下代码段

userDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.____"];
[userDefaults setObject:@"w/e" forKey:@"mykey"]; //in my app
[userDefaults stringForKey:@"mykey"]; //in my extension
Run Code Online (Sandbox Code Playgroud)

我在itunes connect中创建了组ID,更新了应用程序和扩展程序的应用程序ID,我重新创建了配置文件,并添加了以下权利

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>com.apple.security.application-groups</key>
        <array>
            <string>group.com.___</string>
        </array>
    </dict>
</plist>
Run Code Online (Sandbox Code Playgroud)

一切都很棒...在模拟器上.当我myKey从设备访问运行插件时,我得到一个零对象.

不是这样,userDefaults它自己的对象不是零.

任何帮助?

编辑 问题似乎没有出现,如果我问和盛大完全访问该插件.但为什么我需要完全访问才能使用此功能?为什么我需要在设备上而不是在模拟器上?

objective-c uikit ios ios8

5
推荐指数
0
解决办法
843
查看次数

Firebase 3x方法无法在真实设备中工作,但在模拟器Swift 3.0上工作

我们正在使用Google Firebase 3.x版本,我们遇到了来自Firebase的奇怪问题.我们使用Swift 3.0并获取用户详细信息,我们使用以下代码段:

 func getUserDetails(uid text:String!, userBlock:@escaping (_ details:AnyObject) -> Void) {
        //check DB Reference is nil or not.
        if self.rootDBRef == nil {
            self.rootDBRef = FIRDatabase.database().reference()
        }
        //check input text must not be empty
        if text.trim().characters.count == 0 {
            userBlock("" as AnyObject)
            return
        }
        let query = self.rootDBRef.child("users").queryOrdered(byChild: "uid").queryEqual(toValue: text)
        query.observeSingleEvent(of: .value, with: { (dbSnapshot) in
            guard let snap: FIRDataSnapshot? = dbSnapshot else {
                print("No Result Found")
                return
            }
            if snap?.value is NSNull {
                //block(found: false)
                userBlock("" as …
Run Code Online (Sandbox Code Playgroud)

ios firebase swift firebase-realtime-database swift3

5
推荐指数
1
解决办法
882
查看次数