我正在尝试在Xamarin中构建今天的小部件。 在模拟器中一切正常,但是当我在真实设备上运行时,我的小部件崩溃时出现以下异常:
对象引用未设置为对象的实例。
我的代码是:
var defs = new NSUserDefaults("group.com.gto.extension", NSUserDefaultsType.SuiteName);
defs.Synchronize();
var equities = defs.ValueForKey(new NSString("key1"));--> this row crashes my widget.
答案 0 :(得分:1)
尝试访问单个应用程序或其组的NSUserDefaults
之间存在差异。后者是你目前正在努力实现的目标。我将尝试总结这个答案中两种策略之间的区别。
我假设您正尝试从另一个应用程序或扩展程序中读取NSUserDefaults
中的条目?只有在这种情况下才使用给定的NSUserDefaults
是明智的。如果是这样,您需要确保以下内容:
首先,您需要确保在证书,标识符和版本中正确配置了应用程序组和所需的应用程序ID。 iOS开发人员中心的配置文件部分已安装在开发环境中。
接下来,您的App和/或Extension项目将需要是上面创建的有效App ID之一,Entitlements.plist文件已启用并指定了应用程序组,并且它已包含在App Bundle中。
完成所有操作后,可以访问共享应用程序组用户默认值[...]
上述两点可能是导致应用程序崩溃的原因。
如果另一方面,您只需要访问当前应用程序的NSUserDefaults
中的值,您只需执行以下操作:
var defs = NSUserDefaults.StandardUserDefaults;
要阅读NSUserDefaults
中的值,如guide和documentation所示,您应该执行以下操作:
var boolForKey = defs.BoolForKey("key");
var stringForKey = defs.StringForKey("key");
....
"key"
参数是您之前存储在key
词典中的value
的{{1}}。
在try / catch中围绕任何从NSUserDefaults
检索值的调用最有可能也是明智的。 NSUserDefaults
中可能尚不存在key
,这很可能是您的问题。