Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 从沙盒应用程序以编程方式标记Mavericks_Cocoa_Osx Mavericks_Appstore Sandbox - Fatal编程技术网

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。未明确使用任何安全范围,保存后立即使用;后来我想它起作用了。(由于某些原子写入文件替换,标签可能丢失;我想写标签没有问题)