带有 App Group 的 NSUserDefault 在 iOS 8 Beta3 中不起作用

Posted

技术标签:

【中文标题】带有 App Group 的 NSUserDefault 在 iOS 8 Beta3 中不起作用【英文标题】:NSUserDefault with App Group is not working in iOS 8 Beta3 【发布时间】:2014-07-19 13:35:44 【问题描述】:

我必须将Boolean 的值保存到我的应用程序中的NSUserDefaultcustom keyboard extension 并与应用程序组共享。

我的代码在ios 8 Beta1 中工作。

self.defaults = [NSUserDefaults standardUserDefaults];

if([self.defaults boolForKey:@"BlackKey"])
    
        NSLog(@"Black");
    

    else
    
        NSLog(@"White");
    

但在 iOS 8 Beta3 中没有。当我从 NSUserDefault 检索 Boolean 值时,它什么也不返回,我无法从自定义键盘扩展加载。

我也尝试在NSUserDefault 中使用initWithSuiteName。我是 iOS 8 Beta3 的那个问题或 bug 的唯一一个吗?

【问题讨论】:

【参考方案1】:

一些可能的解决方案是:

    您的应用组设置不正确,或者您使用的组标识符不正确,initWithSuiteName:

    您尚未启用键盘的网络访问。 This document 在您为键盘禁用网络访问时(默认行为)声明以下内容:

    没有包含应用的共享容器

    这是一个错误。

【讨论】:

所以你的意思是,我必须启用 RequestsOpenAccess 才能使用 NSUserDefault? 看起来这是在 beta 5 中修复的【参考方案2】:

尝试使用

[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"BlackKey"];

当您使用此代码保存和阅读时:

if([[NSUserDefaults standardUserDefaults] boolForKey:@"BlackKey"]) 
    NSLog(@"Black");


else

    NSLog(@"White");

或者如果您已经这样做了,那么它可能是错误,并且 Xcode 6 测试版也有其他错误,因此在 Xcode 5 或更早版本中尝试会更安全。

【讨论】:

这行不通。你应该说 iOS 8 Beta 和 iOS7。不是 XCode 8 Beta。 :D

以上是关于带有 App Group 的 NSUserDefault 在 iOS 8 Beta3 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

教义:带有 CASE WHEN 的 GROUP_CONCAT 的语法是啥?

在带有函数的 MySQL GROUP_CONCAT 中排序

带有 LINQ 的 .NET 驱动程序:NotSupportedException: $project 或 $group

带有 ORDER BY 的 HIVE GROUP_CONCAT

移除 App 不会移除 App Group 数据

MariaDB:带有子查询的 group_concat 失败