2015-04-30 97 views
2

我們正在嘗試部署我們的Xamarin構建的應用程序的AppStore的Apple,所以我們需要將我們的到Unified Api應用程序獲取64位支持。升級到的Xamarin.iOS最新版本(版本:8.8.2.4)後和應用程序遷移到Unified Api,現在我們得到以下編譯錯誤:無法訪問受保護的成員「Foundation.NSDictionary.NSDictionary(System.IntPtr)」

Cannot access protected member 'Foundation.NSDictionary.NSDictionary(System.IntPtr)' via a qualifier of type 'Foundation.NSDictionary'. 

在這條線上出現的錯誤:

NSDictionary prefSpecification = new NSDictionary(preferences.ValueAt(i)); 

這個方法調用的:

public static void RegisterDefaultsFromSettingsBundle() 
    { 
     string settingsBundle = NSBundle.MainBundle.PathForResource("Settings", @"bundle"); 
     if(settingsBundle == null) { 
      System.Console.WriteLine(@"Could not find Settings.bundle"); 
      return; 
     } 
     NSString keyString = new NSString(@"Key"); 
     NSString defaultString = new NSString(@"DefaultValue"); 
     NSDictionary settings = NSDictionary.FromFile(Path.Combine(settingsBundle,@"Root.plist")); 
     NSArray preferences = (NSArray) settings.ValueForKey(new NSString(@"PreferenceSpecifiers")); 
     NSMutableDictionary defaultsToRegister = new NSMutableDictionary(); 
     for (uint i=0; i<preferences.Count; i++) { 
      NSDictionary prefSpecification = new NSDictionary(preferences.ValueAt(i)); 
      NSString key = (NSString) prefSpecification.ValueForKey(keyString); 
      if(key != null) { 
       NSObject def = prefSpecification.ValueForKey(defaultString); 
       if (def != null) { 
        defaultsToRegister.SetValueForKey(def, key); 
       } 
      } 
     } 
     NSUserDefaults.StandardUserDefaults.RegisterDefaults(defaultsToRegister); 
    } 

任何人都可以解釋爲什麼發生這種情況,我該如何解決這個問題?

回答

2

Apple docsPreferenceSpecifiers是字典的數組,所以不是這樣:

NSDictionary prefSpecification = new NSDictionary(preferences.ValueAt(i)); 

你應該能夠做到這一點:

NSDictionary prefSpecification = (NSDictionary)preferences.ValueAt(i); 

Udated

如果您使用新的統一API,您將必須繼承所需的類(本例中爲NSDictionary),才能訪問this Xamarin docs上所述的NSDictionary(IntPtr)構造函數。

希望它有幫助

+0

感謝您的答覆,FormigaNinja。不幸的是,當我嘗試這個時,我得到錯誤「無法將類型'System.IntPtr'轉換爲'Foundation.NSDictionary' – BruceHill

+0

您是否使用新的統一API?請參閱我的答案更新 – FormigaNinja

+0

嗨FormigaNinja。 API。感謝您的更新答案。「運行時」定義在哪裏?它在我的靜態方法的上下文中不可用。「名稱'運行時'在此上下文中不存在」是我現在得到的錯誤消息 – BruceHill