目前我正在使用一种方法来设置数据保护属性,这对我来说看起来相当尴尬。我想知道是否有更直接的方法,而不是处理 NSString
和 NSMutableDictionary
?
这就是我当前正在使用的(我知道它可以通过“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.FileProtectionComplete
和 NSFileManager.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/