从安全范围书签解析NSURL时,如果用户重命名或移动了该文件或文件夹,则书签将过时.Apple的文档说明了陈旧性:
isStale
返回时,如果是,则书签数据是陈旧的.您的应用应使用返回的URL创建新书签,并使用它代替现有书签的任何存储副本.
不幸的是,这对我很少有用.它有可能在5%的时间内工作.尝试使用返回的URL创建新书签会导致错误,代码256,并且在控制台中查看会显示来自sandboxd的消息,说明在更新的URL上拒绝文件读取数据.
注意如果重新生成书签确实有效,它似乎只在第一次重新生成时才起作用.如果再次移动/重命名文件夹/文件似乎永远不会工作.
我最初如何创建和存储书签
-(IBAction)bookmarkFolder:(id)sender {
_openPanel = [NSOpenPanel openPanel];
_openPanel.canChooseFiles = NO;
_openPanel.canChooseDirectories = YES;
_openPanel.canCreateDirectories = YES;
[_openPanel beginSheetModalForWindow:self.window completionHandler:^(NSInteger result) {
if (_openPanel.URL != nil) {
NSError *error;
NSData *bookmark = [_openPanel.URL bookmarkDataWithOptions:NSURLBookmarkCreationWithSecurityScope
includingResourceValuesForKeys:nil
relativeToURL:nil
error:&error];
if (error != nil) {
NSLog(@"Error bookmarking selected URL: %@", error);
return;
}
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:bookmark forKey:@"bookmark"];
}
}];
}
Run Code Online (Sandbox Code Playgroud)
解析书签的代码
-(void)resolveStoredBookmark {
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSData *bookmark = [userDefaults …
Run Code Online (Sandbox Code Playgroud) 在Xcode 4中,当我在iOS项目中工作时,Xcode工具栏中的Scheme下拉菜单通常会显示iPhone XX模拟器,iPad XX模拟器和iOS设备的方案.
在完成影响*.xcodeproj/project.pbxproj文件的事情后更改分支时,我的所有方案都从方案下拉列表中消失.如果我关闭项目并重新打开它,它们会回来.这非常烦人.
这是我正在做的事情:
在这一点上,我的计划被搞砸了,我必须关闭项目并重新打开它以取回它们.
这是他们一开始的样子:
按照我列出的步骤后,这是他们的样子:
有没有人知道这方面的方法还是这只是Xcode中的一个错误?几个月前我向Apple提交了一份关于它的错误报告,但没有收到回复.我在开发者论坛中也没有收到有关它的问题的回复.
更新:如果您有一个包含多个目标的项目,则只有在切换分支后,所选目标的方案才会搞砸.
更新:这是我的.gitignore
# the build
build
# temp nibs and swap files
*~.nib
*.swp
# OS X folder attributes
.DS_Store
# user-specific XCode stuff
*.pbxuser
*.mode1v3
*.mode2v3
*.perspectivev3
*.xcuserstate
project.xcworkspace/
xcuserdata/
Run Code Online (Sandbox Code Playgroud)