Code Monkey home page Code Monkey logo

bhcoredataproperty's Introduction

BHCoreDataProperty

场景

最近开发中, 遇到使用CoreData时, 需要给ManagedObject部分字段加密之后, 存入本地数据库, 在需要用到该值得地方, 解密, 然后再进行使用. 开始思路: 1.在生成的实体的类中, 重写对象的Setter & Getter方法; 2.在Setter方法中进行加密值, 然后进行set操作, Getter方法中进行解密, 然后再return, 但是系统生成的类的属性是添加在了实体类别中, 并隐式自动生成了Setter & Getter方法, 这样就不能按照普通的重写Setter & Getter来了. 查看了苹果iOS更新文档, 发现了新大陆, 官方的文档已经提供了相关的接口供使用. API NEW:  What’s New in Core Data in macOS 10.12, iOS 10.0, tvOS 10.0, and watchOS 3.0.

关键点

NSManagedObject will now also allow subclasses to override accessors and still invoke the implementation that otherwise would have been dynamically generated. This can be done by invoking a method named identically to the overridden method with ‘managedObjectOriginal_’ prepended. For example:

- (void)setDepartment:(Department *)value {
    // invoke the dynamic implementation of setDepartment
  [self managedObjectOriginal_setDepartment:value];
  NSLog(@"invoked %@", NSStringFromSelector(_cmd));
}

实现

// 创建实体BHPerson的类别, 专门用来处理Accessors的变化

@interface BHPerson ()

// Original `name` Setter && Getter Method
- (NSString *)managedObjectOriginal_name;
- (void)managedObjectOriginal_setName:(NSString *)name;

// Original `language` Setter && Getter Method
- (NSString *)managedObjectOriginal_language;
- (void)managedObjectOriginal_setLanguage:(NSString *)language;

@end


@implementation BHPerson (Accessors)

#pragma mark - Override `name` Setter && Getter Method

- (void)setName:(NSString *)name {
  NSString *willSaveName = [NSString stringWithFormat:@"%@%@", name, @"/changed"];
  [self managedObjectOriginal_setName:willSaveName];
}

- (NSString *)name {
  NSString *savedName = [self managedObjectOriginal_name];
  return [savedName stringByReplacingOccurrencesOfString:@"/changed" withString:@""];
}

#pragma mark - Override `language` Setter && Getter Method

- (void)setLanguage:(NSString *)language {
  NSString *willSaveLanguage = [NSString stringWithFormat:@"%@%@", language, @"/changed"];
  [self managedObjectOriginal_setLanguage:willSaveLanguage];
}

- (NSString *)language {
  NSString *savedLanguage = [self managedObjectOriginal_language];
  return savedLanguage;
}

存取


- (void)savePersonData {
  NSDictionary *personData = @{@"name" : @"qiaobahui",  @"language" : @"english"};
  [BHPerson createOrUpdateByDictionaryData:personData completion:^(BOOL success, NSError * _Nonnull error) {
    NSLog(@"SAVE SUCCEED!");
	}];
}

- (void)fetchPersonData {
  BHPerson *peron = [BHPerson current];
  NSLog(@"name: %@", peron.name);
  NSLog(@"language: %@", peron.language);
  /* 输出: name: qiaobahui
      language: english/changed
  */
}

交流与建议

bhcoredataproperty's People

Contributors

bahui avatar

Stargazers

 avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.