在MonoTouch中生成并存储唯一标识符

4

我希望将我的一个应用从标准的iOS Objective C转换为使用MonoTouch的C#。

在我的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;

    }

我在使用MonoTouch的C#时遇到了一些问题。

我发现Mono没有提供与CFUUID_方法类似的版本。
此外,虽然有一个NSUserDefaults.StandardUserDefaults.SetValueForKey方法,但没有一个直接的GetValueForKey方法。

有更多经验的Monotouch用户知道更好的解决方法吗?

1个回答

10

CFUUID未绑定,因为使用.NET System.Guid实现同样的功能更加容易。例如:

CFUUID is not bound because it's easier to use .NET System.Guid to achieve the same. E.g.


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");

谢谢,GUID 部分很好用,我会接受这个答案。但是我在获取设置中的字符串时遇到了问题,而不是设置它们。 - cain
@cain 从内存中执行 settings["key"] 应该会返回一个 NSString,你可以在其上调用 .ToString() 方法来获取 C# 字符串。 - poupou
1
从查找(而不是记忆)的角度来看,使用setting.StringForKey("key")会更好。 - poupou

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接