2012-08-09 4 views
1

현재 데이터 보호 속성을 설정하는 방법을 사용하고 있습니다. 저에게는 다소 어색합니다. 더 직접적인 방법이 있다면 NSStringNSMutableDictionary을 처리하는 대신 궁금합니다.MonoTouch의 파일에 데이터 보호 플래그를 설정하는 쉬운 방법은 무엇입니까?

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; 
       } 

      } 
     } 

답변

1

지금 당장은? 별로. Objective-C 방식이며 MonoTouch (생성) 바인딩을 사용하면 동일한 패턴을 따를 수 있습니다.

NSString을 생성하지 않고 MonoTouch에서 제공하는 것을 사용할 수 있습니다. 'NSFileManager.FileProtectionCompleteNSFileManager.FileProtectionKey. 따라서 두 번의 NSString 인스턴스를 여러 번 만들지 않아도됩니다 (메서드가 여러 번 호출되는 경우 MonoTouch 버전이 지연 생성되고 캐시 됨). 오타가 발생할 가능성이 없어집니다.

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

는 또한 우리가 더 많은 C 번호를 NSDictionary과 같은 일을 할 -ish API를 제공하기 위해을 시도 : 그래서 C 번호에게이 될 것 3 구문을 사용하여

. OTOH 많은 API가 있으므로 NSDictionary 옵션 만 사용할 수 있습니다. (지금까지) 개로 제한되어 있습니다.

참고 :이 API는 더 나은

일예 수 사례를 발견 할 때 향상 bug reports 파일 주시기 바랍니다 그것은 (적어도 하나의 값에 대해) 많은 코드 라인을 저장하지 않습니다하지만 소스의 모양을 만들 것

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

:이/이상적으로 다음과 같아야 것 (전에 행해졌 다)와 유사한 경우에 따라 (IMO) 코드 완성과 함께 사용하기 쉽고 오타를 피할 수 있습니다.

0

당신은 NSMutableDictionary에게 SetObject보다는 Add을 사용할 수 그건 내가 현재 (나는 그것이 "using"문을 최적화 할 수 있습니다 알고 있지만, 내가 여기 이후 해요 게 아니에요) 사용하고 무엇 새로운 NSString을 새로 만들 필요는 없지만 실제로 만들지는 않습니다. 은 이미 가지고있는 것과 많이 다릅니다.

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

내가 아는 한, 이것이 파일 속성을 설정하는 유일한 방법입니다.