2013-06-24 32 views
0

向Google詢問'有效的安全範圍書籤',我沒有得到一個好的結果。無論如何,我沒有保存和閱讀安全範圍的書籤的麻煩。我有一個XML文件,它保存了一個NSMutableArray,該列表僅列出用戶選擇的導出路徑的一個安全範圍的書籤。應用程序使用以下方法讀取此書籤。驗證安全範圍的書籤數據

- (void)loadBookmarks { 
    if ([self fileExists:[self filePath1]]) { // function 
     NSMutableArray *items = [[NSMutableArray alloc] initWithContentsOfFile:[self filePath2]]; 
     key2a = @"KEY2a"; 
     for (NSInteger i5 = 0; i5 < items.count; i5++) { 
      NSData *k1 = [[items objectAtIndex:i5] objectForKey:@"KEY2a"]; // bookmark 

      // Start Security-scoped bookmark // 
      NSURL *bookmarkFileURL; 
      bookmarkFileURL = [self convertBookmarktoURL:k1]; // function 
      [bookmarkFileURL startAccessingSecurityScopedResource]; // <<< no error 
      // End Security-scoped bookmark // 

      dict2 = [NSDictionary dictionaryWithObjectsAndKeys:k1,key2a,nil]; 
      [bookmarkArray1 addObject:dict2]; 
     } // End for 
    } 
} 

如果我嘗試手動操作XML文件中的數據,調試器不會指示任何類型的錯誤。有什麼方法可以驗證這些數據嗎?

謝謝你的幫助。

+0

應用沙盒設計指南說:「當你以後需要訪問書籤資源,通過調用該URLByResolvingBookmarkData解決其安全範圍的書籤:選擇:relativeToURL:bookmarkDataIsStale:錯誤:在NSURL類的方法」 –

回答

0

看來我需要檢查由NSURLBookmarkResolutionWithSecurityScope返回的錯誤。

- (NSURL *)convertBookmarktoURL:(NSData *)bookmarkData { 
    NSError *error = nil; 
    BOOL bookmarkDataIsStale; 
    if (error != NULL) { 
     return NULL; 
    } else { 
     return [NSURL URLByResolvingBookmarkData:bookmarkData options:NSURLBookmarkResolutionWithSecurityScope relativeToURL:nil bookmarkDataIsStale:&bookmarkDataIsStale error:&error]; 
    } 
} 


// data is NSData 
if ([self convertBookmarktoURL:data] != NULL) { 
    // valid 
} else { 
    // invalid bookmark 
}