Core Data Macos 应用程序和与 OS X 10.7 的兼容性

Posted

技术标签:

【中文标题】Core Data Macos 应用程序和与 OS X 10.7 的兼容性【英文标题】:Core Data Mac OS X app and compatibilty with OS X 10.7 【发布时间】:2012-10-28 23:09:15 【问题描述】:

您好,我已经使用 Core Data 和 OS X 10.8 创建了一个简单应用程序,它是 xcode 创建的简单模板,但是如果我将 Base SDK 更改为 10.7 xcode 在 App Controller 中的此方法上会出现此错误:

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator

    if (_persistentStoreCoordinator) 
    return _persistentStoreCoordinator;


NSManagedObjectModel *mom = [self managedObjectModel];
if (!mom) 
    NSLog(@"%@:%@ No model to generate a store from", [self class], NSStringFromSelector(_cmd));
    return nil;


NSFileManager *fileManager = [NSFileManager defaultManager];
NSURL *applicationFilesDirectory = [self applicationFilesDirectory];
NSError *error = nil;

NSDictionary *properties = [applicationFilesDirectory resourceValuesForKeys:@[NSURLIsDirectoryKey] error:&error];

if (!properties) 
    BOOL ok = NO;
    if ([error code] == NSFileReadNoSuchFileError) 
        ok = [fileManager createDirectoryAtPath:[applicationFilesDirectory path] withIntermediateDirectories:YES attributes:nil error:&error];
    
    if (!ok) 
        [[NSApplication sharedApplication] presentError:error];
        return nil;
    
 else 
    if (![properties[NSURLIsDirectoryKey] boolValue]) 
        // Customize and localize this error.
        NSString *failureDescription = [NSString stringWithFormat:@"Expected a folder to store application data, found a file (%@).", [applicationFilesDirectory path]];

        NSMutableDictionary *dict = [NSMutableDictionary dictionary];
        [dict setValue:failureDescription forKey:NSLocalizedDescriptionKey];
        error = [NSError errorWithDomain:@"YOUR_ERROR_DOMAIN" code:101 userInfo:dict];

        [[NSApplication sharedApplication] presentError:error];
        return nil;
    


NSURL *url = [applicationFilesDirectory URLByAppendingPathComponent:@"SimpleApp.storedata"];
NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:mom];
if (![coordinator addPersistentStoreWithType:NSXMLStoreType configuration:nil URL:url options:nil error:&error]) 
    [[NSApplication sharedApplication] presentError:error];
    return nil;

_persistentStoreCoordinator = coordinator;

return _persistentStoreCoordinator;

我收到此错误:

我该怎么办?

【问题讨论】:

【参考方案1】:

这实际上不是 Core Data 的问题,但这与 object subscripting 有关。为了使这些文字正常工作,您的 SDK 至少需要为 OS X 10.8 或 ios 6。

如果没有其他方法,您仍然可以使用下标并将 SDK 保持在 10.7,方法是向 NSObject 上实现所需方法的类别添加存根标头。你可以看到一个这样的例子here。不过,我建议您将 SDK 保持在 10.8 上。

【讨论】:

那么我该如何修复它以在 10.7 上运行? 可以的。这是语法糖,与操作系统无关。

以上是关于Core Data Macos 应用程序和与 OS X 10.7 的兼容性的主要内容,如果未能解决你的问题,请参考以下文章

MAC OS随笔

OS X 上的 Core Data 轻量迁移

OS X Core Data Utility 教程崩溃

Core Data Mac OS X 基于文档的应用程序中的 NSArrayController 类与实体模式

在 Mac OS X 和 iOS 的 Core Data 中存储贝塞尔路径

OS X Core Data - 将托管对象上下文传递给视图控制器