在MonoTouch中为文件设置数据保护标志的简单方法



目前我正在使用一种方法来设置数据保护属性,这对我来说看起来很尴尬。我想知道是否有更直接的方法,而不是处理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(生成的)绑定允许你遵循相同的模式。

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

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

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

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

注意:当您发现 API 可以更好的情况时,请随时提交增强错误报告

例如,基于类似的情况(以前做过),理想情况下,这将/应该如下所示:

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

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

您可以在NSMutableDictionary上使用SetObject而不是Add,以避免必须创建新的NSString,但它对您已经拥有的东西并没有太大区别,例如

var oDic = new NSMutableDictionary ();
oDic.SetObject ("NSFileProtectionComplete", "NSFileProtectionKey");

据我所知,这是设置文件属性的唯一方法。

相关内容

  • 没有找到相关文章

最新更新