Cocoa 从沙盒应用程序以编程方式标记Mavericks
我正在沙盒应用程序中写入文件,然后尝试使用Cocoa 从沙盒应用程序以编程方式标记Mavericks,cocoa,osx-mavericks,appstore-sandbox,Cocoa,Osx Mavericks,Appstore Sandbox,我正在沙盒应用程序中写入文件,然后尝试使用-[NSURL setResourceValue:theTags-forKey:NSURLTagNamesKey-error:&thetagginerror]为其设置标记。我没有收到任何错误(即,标签成功应用一次),但最终文件被替换,标签丢失。这只是在沙盒应用程序中;如果我关闭沙箱,一切正常。在沙盒模式下,如果我在不写入文件的情况下设置了标记,那么同样可以正常工作 本质上,我无法在写入文件后设置文件的标记。我怎样才能修好它?有什么见解吗 示例代码: #i
-[NSURL setResourceValue:theTags-forKey:NSURLTagNamesKey-error:&thetagginerror]为其设置标记代码>。我没有收到任何错误(即,标签成功应用一次),但最终文件被替换,标签丢失。这只是在沙盒应用程序中;如果我关闭沙箱,一切正常。在沙盒模式下,如果我在不写入文件的情况下设置了标记,那么同样可以正常工作
本质上,我无法在写入文件后设置文件的标记。我怎样才能修好它?有什么见解吗
示例代码:
#import <Cocoa/Cocoa.h>
@interface AppDelegate : NSObject <NSApplicationDelegate>
{
NSWindow *_window;
NSURL *_saveURL;
NSSavePanel *_savePanel;
}
@property (assign) IBOutlet NSWindow *window;
@property (retain) NSURL *saveURL;
@property (retain) NSSavePanel *savePanel;
- (IBAction)writeAndTag:(id)sender;
- (IBAction)justTag:(id)sender;
@end
@implementation AppDelegate
@synthesize window = _window;
@synthesize saveURL = _saveURL;
@synthesize savePanel = _savePanel;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
self.savePanel = [NSSavePanel savePanel];
}
- (IBAction)writeAndTag:(id)sender
{
[self.savePanel beginSheetModalForWindow:self.window completionHandler:^(NSInteger result) {
self.saveURL = [self.savePanel URL];
NSString *testString = @"Hello!";
NSError *error = nil;
[testString writeToFile:[self.saveURL path] atomically:NO encoding:NSUTF8StringEncoding error:&error];
if(error)
{
NSLog(@"Err in saving: %@" ,error);
error = nil;
}
// Tag is lost here
BOOL success = [self.saveURL setResourceValue:[NSArray arrayWithObjects:@"Test", nil] forKey:NSURLTagNamesKey error:&error];
NSLog(@"Tagging success: %@", (success)?@"YES":@"NO");
if(error)
{
NSLog(@"Err in tagging: %@" ,error);
}
}];
}
- (IBAction)justTag:(id)sender
{
// Works fine
[self.saveURL setResourceValue:[NSArray arrayWithObjects:@"Test", nil] forKey:NSURLTagNamesKey error:NULL];
}
@end
#导入
@接口AppDelegate:NSObject
{
NSWindow*\u窗口;
NSURL*_saveURL;
NSSavePanel*_savePanel;
}
@属性(分配)窗口*窗口;
@属性(保留)NSURL*saveURL;
@属性(保留)NSSavePanel*savePanel;
-(iAction)writeAndTag:(id)发送方;
-(iAction)justTag:(id)发送方;
@结束
@实现AppDelegate
@合成窗口=_窗口;
@合成saveURL=\u saveURL;
@合成savePanel=\u savePanel;
-(无效)ApplicationIDFinishLaunching:(NSNotification*)通知
{
self.savePanel=[NSSavePanel savePanel];
}
-(iAction)writeAndTag:(id)发件人
{
[self.savePanel beginSheetModalForWindow:self.window completionHandler:^(NSInteger结果){
self.saveURL=[self.savePanel URL];
NSString*testString=@“你好!”;
n错误*错误=nil;
[testString writeToFile:[self.saveURL路径]原子:无编码:NSUTF8StringEncoding错误:&错误];
如果(错误)
{
NSLog(@“保存错误:%@”,错误);
误差=零;
}
//标签在这里丢失了
BOOL success=[self.saveURL setResourceValue:[NSArray arrayWithObjects:@“Test”,nil]forKey:NSURLTagNamesKey error:&error];
NSLog(@“标记成功:%@”,(成功)?@“是”:@“否”);
如果(错误)
{
NSLog(@“标记错误:%@”,错误);
}
}];
}
-(iAction)justTag:(id)发送者
{
//很好
[self.saveURL setResourceValue:[NSArray arrayWithObjects:@“Test”,nil]forKey:NSURLTagNamesKey错误:NULL];
}
@结束
系统日志中出现的任何内容(Console.app
)?@特洛伊木马,没有。。没有日志,您是否使用安全范围的书签在应用程序运行之间保留对文档的访问权限?@trojanfoe,我只是使用SavePanel获取URL。未明确使用任何安全范围,保存后立即使用;后来我想它起作用了。(由于某些原子写入文件替换,标签可能丢失;我想写标签没有问题)