对象引用未设置为xamarin ios app组中的对象实例

时间:2016-12-25 13:49:32

标签: ios xamarin widget

我正在尝试在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.

1 个答案:

答案 0 :(得分:1)

尝试访问单个应用程序或其组的NSUserDefaults之间存在差异。后者是你目前正在努力实现的目标。我将尝试总结这个答案中两种策略之间的区别。

应用程序组用户默认值

我假设您正尝试从另一个应用程序或扩展程序中读取NSUserDefaults中的条目?只有在这种情况下才使用给定的NSUserDefaults是明智的。如果是这样,您需要确保以下内容:

  

首先,您需要确保在证书,标识符和版本中正确配置了应用程序组和所需的应用程序ID。 iOS开发人员中心的配置文件部分已安装在开发环境中。

     

接下来,您的App和/或Extension项目将需要是上面创建的有效App ID之一,Entitlements.plist文件已启用并指定了应用程序组,并且它已包含在App Bundle中。

     

完成所有操作后,可以访问共享应用程序组用户默认值[...]

     

https://developer.xamarin.com/guides/ios/application_fundamentals/user-defaults/#Accessing_an_App_Group_NSUserDefaults_Instance

上述两点可能是导致应用程序崩溃的原因。

单应用程序用户默认值

如果另一方面,您只需要访问当前应用程序的NSUserDefaults中的值,您只需执行以下操作:

var defs = NSUserDefaults.StandardUserDefaults;

读取值

要阅读NSUserDefaults中的值,如guidedocumentation所示,您应该执行以下操作:

var boolForKey = defs.BoolForKey("key");
var stringForKey = defs.StringForKey("key");
....

"key"参数是您之前存储在key词典中的value的{​​{1}}。

在try / catch中围绕任何从NSUserDefaults检索值的调用最有可能也是明智的。 NSUserDefaults中可能尚不存在key,这很可能是您的问题。