我尝试将图片从iPhone上传到我的Xamarin-PCL-App。我使用的是Share-Extension和iOS应用组。当扩展发生变化时,我的Main-App when on changing NSUserDefaults不会被调用。
我尝试将图片从iPhone上传到我的Xamarin-PCL-App。我使用的是共享扩展。我已经实现了这个扩展,它工作得很好。点击共享按钮后,我可以在galery中选择我的应用程序作为目标。扩展的DidSelectPost()事件被调用,我可以在iPhone上显示一条消息。现在我想进入我的Main-App来处理传入的图片。我添加了一个应用程序组到我的应用程序和扩展(在entitlement.plist文件中,它已经在那里)。现在我应该能够让主应用程序和扩展程序通过NSUserDefaults通信了,对吧?
我在FinishedLaunching的Main-Apps AppDelegate中添加了以下代码:
var userDefaults = new NSUserDefaults("group.de.companyname.appname", NSUserDefaultsType.SuiteName);
userDefaults.AddObserver("rate", NSKeyValueObservingOptions.Prior, note =>
{
NSUserDefaults shared = new NSUserDefaults("group.de.companyname.appname", NSUserDefaultsType.SuiteName);
var value = shared.ValueForKey(new NSString("rate"));
});应该在名为“NSUserDefaults”的rate密钥发生变化时调用它。如果我在Main-App中改变这个值,事件就会被调用。
我在ViewContollers (类型: SLComposeServiceViewController) DidSelectPost函数中添加了一个简单的更改:
NSUserDefaults shared = new NSUserDefaults("group.de.companyname.appname", NSUserDefaultsType.SuiteName);
shared.SetString("test", "rate");
shared.Synchronize();我的Main-App就是得不到这些改变。
提前感谢!
发布于 2019-03-29 15:29:02
您应该在您更改值的位置使用AddObserver,例如您使用的ViewContollers。
Main-应用程序AppDelegate
var userDefaults = NSUserDefaults.StandardUserDefaults;
shared.SetString("testOldData", "rate");
shared.Synchronize();ViewContollers:
public override void ViewDidLoad ()
{
base.ViewDidLoad ();
NSUserDefaults shared = NSUserDefaults.StandardUserDefaults;
shared.AddObserver(this, "Name", NSKeyValueObservingOptions.OldNew, IntPtr.Zero);
}
//Test Changing the value
public override void ViewDidAppear(bool animated)
{
base.ViewDidAppear(animated);
NSUserDefaults shared = NSUserDefaults.StandardUserDefaults;
shared.SetString("testNewData", "rate");
shared.Synchronize();
}当值发生变化时,可以调用此方法:
//When value cahnged this will be invoked
public override void ObserveValue(NSString keyPath, NSObject ofObject, NSDictionary change, IntPtr context)
{
if (keyPath == "Name")
{
Console.WriteLine("--old--" + change.ValueForKey(new NSString("old")));
Console.WriteLine("--new--" + change.ValueForKey(new NSString("new")));
}
else
base.ObserveValue(keyPath, ofObject, change, context);
}https://stackoverflow.com/questions/55396730
复制相似问题