验证安全范围的书签数据

时间:2013-06-24 02:09:22

标签: objective-c cocoa osx-mountain-lion sandbox

向谷歌询问“有效的安全范围书签”,我没有得到好结果。无论如何,我在保存和阅读安全范围的书签方面没有遇到任何问题。我有一个 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文件中的数据,则调试器不会指示任何类型的错误。有没有办法验证这些数据?

感谢您的帮助。

1 个答案:

答案 0 :(得分: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
}