我根据 Apple 网站的说明在 CoreData Stack 应用程序中进行了操作:
@interface MyDataController : NSObject
@property (strong, nonatomic, readonly) NSPersistentContainer *persistentContainer;
- (id)initWithCompletionBlock:(CallbackBlock)callback;
@end
@implementation MyDataController
- (id)init
{
self = [super init];
if (!self) return nil;
self.persistentContainer = [[NSPersistentContainer alloc] initWithName:@"DataModel"];
[self.persistentContainer loadPersistentStoresWithCompletionHandler:^(NSPersistentStoreDescription *description, NSError *error) {
if (error != nil) {
NSLog(@"Failed to load Core Data stack: %@", error);
abort();
}
callback();
}];
return self;
}
遇到了问题,persistentContainer
有属性readonly
,并且在
self.persistentContainer = [[NSPersistentContainer alloc] initWithName:@"DataModel"];
不允许自己被覆盖,怎么办?
我正确理解@interface
.h 文件和@implementation
.m 中的内容?
为了初始化一个只读属性,你必须直接访问你的属性所代表的变量:
现在关于将代码划分为接口和实现。我将制作以下带有扩展名“*.h”的头文件(我还为您的 CallbackBlock 回调函数的类型添加了同义词):
我会像这样实现(换句话说,文件的内容带有“*.m”扩展名):