在MonoTouch下,我想访问NSUbiquitousKeyValueStoreDidChangeExternallyNotification(iOS5 / iCloud键值入站更新)通知数据:
有一个样本@ http://docs.xamarin.com/@api/deki/files/321/=iCloud.zip,但上面访问的代码已被注释掉并且有错误(它如何尝试将原因转换为整数是错误的)。我在这附近:
NSNotificationCenter.DefaultCenter.AddObserver(new NSString("NSUbiquitousKeyValueStoreDidChangeExternallyNotification"),
delegate(NSNotification n)
{
NSDictionary userInfo = n.UserInfo;
NSNumber reason = (NSNumber)userInfo.ObjectForKey(
new NSString("NSUbiquitousKeyValueStoreChangeReasonKey"));
int ireason = reason.IntValue;
NSArray changedKeys = (NSArray)userInfo.ObjectForKey(
new NSString("NSUbiquitousKeyValueStoreChangedKeysKey"));
});
我想出了如何将理由作为整数。但是我如何将NSStrings的NSArray转换为 一个简单的字符串[] ??我以前从未使用过核心的Objective-C类包装器,抱歉。
答案 0 :(得分:5)
希望这有助于〜使用从NSArray.ValueAt()方法返回的IntPtr来新建一个NSString并访问你所追求的值。
NSNotificationCenter.DefaultCenter.AddObserver (
NSUbiquitousKeyValueStore.DidChangeExternallyNotification
, delegate (NSNotification n)
{
Console.WriteLine("Cloud notification received");
NSDictionary userInfo = n.UserInfo;
NSNumber reason = (NSNumber)userInfo.ObjectForKey(NSUbiquitousKeyValueStore.ChangeReasonKey);
int ireason = reason.IntValue;
Console.WriteLine("reason.IntValue: " + ireason);
NSArray changedKeys = (NSArray)userInfo.ObjectForKey (NSUbiquitousKeyValueStore.ChangedKeysKey);
var changedKeysList = new System.Collections.Generic.List<string> ();
for (uint i = 0; i < changedKeys.Count; i++)
{
var key = new NSString (changedKeys.ValueAt(i));
Console.WriteLine("changedKey IntPtr: " + changedKeys.ValueAt(i));
Console.WriteLine("changedKey (value): " + key);
changedKeysList.Add (key);
}
// now do something with the list...
});