当前位置: 首页 > 编程笔记 >

core-data Objective-C示例

鲁彬炳
2023-03-14
本文向大家介绍core-data Objective-C示例,包括了core-data Objective-C示例的使用技巧和注意事项,需要的朋友参考一下

示例

这是用于iOS 10+的简单但功能强大的核心数据设置。有两种访问核心数据的方法

  1. viewContext。将viewContext只能从主线程,并且仅被用于读取。

  2. 强大的enqueueCoreDataBlock。所有写作都应使用完成enqueueCoreDataBlock。最后无需保存,它将自动保存。所有写入都排队在operationQueue中,因此永远不会发生写入冲突。

确保切勿在另一个上下文中使用上下文中的任何ManagedObjects。还要丢弃所有创建或获取的对象,enqueueCoreDataBlock因为执行该块后,支持它们的上下文将被破坏。

// CoreDataManager.h

@interface CoreDataManager : NSObject
@property (nonatomic, readonly) NSManagedObjectContext * viewContext;
- (void)enqueueCoreDataBlock:(void (^)(NSManagedObjectContext* context))block;
@end

// CoreDataManager.m

@implementation NSManagedObjectContext(SaveIfNeeded)
-(BOOL) saveIfNeeded{
    BOOL toReturn = YES;
    if ([self hasChanges]) {
        NSError *error;
        toReturn = [self save:&error];
        if (toReturn == NO || error)
        {
            //在这里您应该登录到您的分析服务
            NSLog(@"--- Failed to commit data\n error: %@", error);
        }
    }
    return toReturn;
}
@end
@interface CoreDataManager ()
@property (nonatomic, strong) NSPersistentContainer* persistentContainer;
@property (nonatomic, strong) NSOperationQueue* persistentContainerQueue;    
@end
@implementation CoreDataManager

- (id)init
{
    self = [super init]
    if (self)
    {
       self.persistentContainer= [[NSPersistentContainer alloc] initWithName:@"PROJECT_NAME_ALSO_NAME_OF_MODEL" managedObjectModel:managedObjectModel];
        [self.persistentContainer loadPersistentStoresWithCompletionHandler:^(NSPersistentStoreDescription * description, NSError * error) {              
        }];
        self.persistentContainer.viewContext.automaticallyMergesChangesFromParent = YES;
        _persistentContainerQueue = [[NSOperationQueue alloc] init];
        _persistentContainerQueue.maxConcurrentOperationCount = 1;
        _persistentContainerQueue.name = @"persistentContainerQueue";
        dispatch_queue_t queue = dispatch_queue_create("persistentContainerQueue.dispatchQueue", DISPATCH_QUEUE_SERIAL);
        _persistentContainerQueue.underlyingQueue = queue;            
    }
}

- (void)enqueueCoreDataBlock:(void (^)(NSManagedObjectContext* context))block{
    void (^blockCopy)(NSManagedObjectContext*) = [block copy];

    [self.persistentContainerQueue addOperation:[NSBlockOperation blockOperationWithBlock:^{
        NSManagedObjectContext* context =  self.persistentContainer.newBackgroundContext;
        [context performBlockAndWait:^{
            blockCopy(context);
            [context saveIfNeeded];
        }];
    }]];
}

-(NSManagedObjectContext*) viewContext{
    if (![NSThread mainThread]) {
        //在这里您应该登录到您的分析服务。如果您处于开发人员模式,则应崩溃以强制您解决此问题
        NSLog(@"在错误的线程上访问上下文!");
    }
    return self.persistentContainer.viewContext;
}
           

 类似资料:
  • 本文向大家介绍core-data Swift 2示例,包括了core-data Swift 2示例的使用技巧和注意事项,需要的朋友参考一下 示例            

  • #include "servlet.hpp" namespace hi{ class hello : public servlet { public: void handler(request& req, response& res) { res.headers.find("Content-Type")->second = "text/plain;charse

  • 之前,我使用了.NETCore2.x的grpc,现在称为C-CoreGRPC,以区别于新的.NETCore3版本。我喜欢新的grpc能够从VS2019中的proto文件编译和生成客户端/服务器存根类的方式,而不是pf必须从packages文件夹中获取grpc工具,手动为C#编译它以生成客户端/服务端存根类,然后导入VS。新版本的grpc更干净。然而,在将C核grpc与asp。net核心web AP

  • 本文向大家介绍什么是C#Asp.net Core中的Metapackage?,包括了什么是C#Asp.net Core中的Metapackage?的使用技巧和注意事项,需要的朋友参考一下 众所周知,Microsoft.AspNetCore软件包是添加到许多ASP.NET Core模板中的软件包之一。 当打开一个新的ASP.NET Core项目时,Microsoft.AspNetCore程序包将作为

  • 本文向大家介绍C / C ++中的mbrtoc16()及其示例,包括了C / C ++中的mbrtoc16()及其示例的使用技巧和注意事项,需要的朋友参考一下 在本文中,我们将讨论C ++ STL中std::mbrtoc16()函数的工作,语法和示例。 什么是std::mbrtoc16()? std::mbrtoc16()函数是C ++ STL中的内置函数,在<cuchar>头文件中定义。此函数用

  • 本文向大家介绍C / C ++中的mbrtoc32()及其示例,包括了C / C ++中的mbrtoc32()及其示例的使用技巧和注意事项,需要的朋友参考一下 在本文中,我们将讨论C ++ STL中std::mbrtoc32()函数的工作,语法和示例。 什么是std::mbrtoc32()? std::mbrtoc32()函数是C ++ STL中的内置函数,在<cuchar>头文件中定义。此函数用