【问题标题】:NSDocument isLocked implementation for 10.7?NSDocument isLocked 10.7 的实现?
【发布时间】:2012-08-21 16:28:19
【问题描述】:

如何检查文档是否在 10.7 中被锁定?

NSDocument 有一个方法 isLocked,但它仅在 10.8 上可用。

【问题讨论】:

    标签: cocoa nsdocument


    【解决方案1】:

    这是我的实现:

    + (BOOL)isDocumentLocked:(NSDocument*)doc
    {
      if (doc == nil)
      {
        return NO;
      }
      else if ([doc respondsToSelector:@selector(isLocked)]) // 10.8
      {
        return [doc isLocked];
      }
      else // OS X version < 10.8
      {
        NSError * error;
        BOOL isAutosavingSafe = [doc checkAutosavingSafetyAndReturnError:&error];
        if (!isAutosavingSafe)
        {
          return YES;
        }
    
        if (doc.fileURL == nil)
          return NO;
    
        NSFileManager* fm = [NSFileManager defaultManager];
        NSString* path = doc.fileURL.absoluteURL.path;
    
        if (![fm isWritableFileAtPath:path])
          return YES; // No writing permissions
    
        NSDictionary *attributes = [fm attributesOfItemAtPath:path error:&error];
        BOOL isLocked = [[attributes objectForKey:NSFileImmutable] boolValue];
        if (isLocked)
        {
          return YES;
        }
      }
      return NO;
    }
    

    【讨论】:

    • 请注意这里不需要调用absoluteURL
    • 对于 OS X 10.7 及更高版本,还有 [url getResourceValue:&amp;writable forKey:NSURLIsWritableKey error:&amp;error] 更简洁
    猜你喜欢
    • 1970-01-01
    • 2017-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多