2012-12-10 38 views
4

我正在考慮將使用MonoTouch的標準iOS Objective C轉換爲C#的應用程序。在MonoTouch中生成並存儲一個唯一的ID

在我的Objective C代碼中,我生成一個唯一的標識符並將其保存到NSUserDefaults以驗證並檢查後續登錄。這裏是我正在使用的方法:

- (NSString *) localUuid { 
     NSString * ident = [[NSUserDefaults standardUserDefaults] objectForKey:UUID]; 
     if(!ident){ 
      CFUUIDRef uuidRef = CFUUIDCreate(NULL); 
      CFStringRef uuidStringRef = CFUUIDCreateString(NULL, uuidRef); 
      CFRelease(uuidRef); 
      ident = [NSString stringWithString:(__bridge_transfer NSString *)uuidStringRef]; 
      [[NSUserDefaults standardUserDefaults] setObject:ident forKey:UUID]; 
      [[NSUserDefaults standardUserDefaults] synchronize]; 
     } 
     return ident; 

    } 

我有問題得到類似的工作在C#與MonoTouch雖然。

我還沒有找到Mono提供的CFUUID_ _方法的一個版本。
此外,雖然似乎有一個NSUserDefaults.StandardUserDefaults.SetValueForKey方法,但沒有一個簡單的GetValueForKey方法。

有沒有人更有經驗的Monotouch知道更好的方法來做到這一點?

回答

10

CFUUID沒有綁定,因爲它更容易使用.NET System.Guid來實現相同。例如。

var uuid = Guid.NewGuid(); 
string s = uuid.ToString(); // if a string is preferred 

此外,儘管似乎有一個NSUserDefaults.StandardUserDefaults.SetValueForKey方法中,存在不是一個簡單的方法GetValueForKey。

有安全類型的方法做同樣的,例如:

NSUserDefaults settings = NSUserDefaults.StandardUserDefaults; 
settings.SetString (s, "key"); 
+0

感謝,將GUID部分的偉大工程,所以我會接受這個作爲答案。但是我從設置中獲取字符串時遇到問題,未設置它們。 – cain

+0

@cain從內存中執行'settings [「key」]'應該返回一個'NSString',你可以在其中調用'.ToString()'來獲得一個C#字符串。 – poupou

+1

從看(而不是內存),你會更好使用'setting.StringForKey(「key」)'。 – poupou