c# - 在 MonoTouch 中的文件上设置数据保护标志的简单方法?

标签 c# xamarin.ios data-protection

目前我正在使用一种方法来设置数据保护属性,这对我来说看起来相当尴尬。我想知道是否有更直接的方法,而不是处理 NSStringNSMutableDictionary? 这就是我当前正在使用的(我知道它可以通过“using”语句进行优化,但这不是我在这里追求的):

public static void SetDataProtectionFor ( string sFileToProtect )
        {
            NSError oError = null;
            NSMutableDictionary oDic = null;

            try
            {

                oDic = new NSMutableDictionary ();
                oDic.Add ( new NSString ("NSFileProtectionKey"), new NSString ("NSFileProtectionComplete") );


                NSFileManager.DefaultManager.SetAttributes ( oDic, sFileToProtect, out oError );
                if ( oError != null )
                {
                    throw new DataProtectionGoneMissingException ();
                }
            }
            catch ( Exception ex )
            {
                throw new DataProtectionGoneMissingException ();
            }
            finally
            {
                if ( oDic != null )
                {
                    oDic.Dispose ();
                    oDic = null;
                }

            }
        }

最佳答案

现在?不多。这是 Objective-C 方式,MonoTouch(生成)绑定(bind)允许您遵循相同的模式。

您可以避免创建 NSString 并使用 MonoTouch 提供的,例如'NSFileManager.FileProtectionCompleteNSFileManager.FileProtectionKey。这将避免多次创建两个 NSString 实例(如果多次调用您的方法,MonoTouch 版本将被延迟创建和缓存)并消除拼写错误的可能性。

因此使用 C#3 语法将变为:

NSMutableDictionary oDic = new NSMutableDictionary () {
    { NSFileManager.FileProtectionKey, NSFileManager.FileProtectionComplete }
};

此外,我们尝试提供更多 C# 风格的 API 来完成与 NSDictionary 相同的工作。 OTOH,因为有很多 API 使用 NSDictionary 作为选项,所以我们(到目前为止)只提供了最常见的选项。

注意:请随时提交增强文件 bug reports当您发现 API 可以做得更好的情况时

例如基于类似的案例(之前做过),理想情况下,这应该是这样的:

var attr = new NSFileManagerAttribute ();
attr.ProtectionKey = NSFileManager.ProtectionComplete; // enum version
NSFileManager.DefaultManager.SetFileAttribute (sFileToProtect, attr);

它不会节省太多代码行(至少对于单个值而言),但它会使源看起来更好(IMO)并且更易于使用代码完成并避免拼写错误(在字符串上)。

关于c# - 在 MonoTouch 中的文件上设置数据保护标志的简单方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11879813/

相关文章:

php - 在 PHP 中保护登录 cookie 数据的最佳方法是什么?

Azure 保护策略/Azure RMS - 通用数据保护

ios - 如何在 Xamarin ios 中定位目录资源

ios - 将 iOS Swift 应用程序移植到 Xamarin 以进行 Windows 部署

c# - ASP.NET MVC FakeItEasy - 模拟 session 在单元测试中不返回正确的值

c# - 在 AsyncFileUpload 上传完成时启用按钮

xamarin.forms - 适用于 iOS 和 Android 的蓝牙扫描仪(Xamarin Forms)

javascript - 如何在单页应用程序中处理敏感数据

c# - 如果单词之间有更多空格,如何从字符串中获取第 n 个单词?

C# 如何测试 IPAddress 是否在子网中?