开始在Objective‑C项目中使用Realm

Realm是一个移动端数据库,它可以替代SQLite和Core Data。目前,Realm在各种平台都有实现:比如React Native,Objective-C,Swift,Android(JAVA)……

Objective-C版本的Realm可以让你高效安全的编写应用程序的模型层。它提供了一套快速的持久化方案。来段代码,感受一下:

// 像定义普通objective-C对象一样定义一个Realm class(对象需要继承自RLMObject)
@interface Dog : RLMObject
@property NSString *name;
@property NSData   *picture;
@property NSInteger age;
@end
@implementation Dog
@end
RLM_ARRAY_TYPE(Dog) // 声明RLM数组
@interface Person : RLMObject
@property NSString             *name;
@property RLMArray<Dog *><Dog> *dogs;
@end
@implementation Person
@end

// 使用Realm对象也和使用普通的OC对象一样
Dog *mydog = [[Dog alloc] init];
mydog.name = @"Rex";
mydog.age = 1;
mydog.picture = nil; // Realm支持property为nil~
NSLog(@"Name of dog: %@", mydog.name);

// 查询所有年龄大于2的对象
RLMResults<Dog *> *puppies = [Dog objectsWhere:@"age < 2"];
puppies.count; // => ***这里返回了0,因为我们没有将对象存储到Realm当中!***

// 持久化数据在Realm下变得如丝般顺滑
RLMRealm *realm = [RLMRealm defaultRealm];
[realm transactionWithBlock:^{
  [realm addObject:mydog];
}];

// 好了!数据存储了,查询结果也特么的实时更新了!
puppies.count; // => 1

// 让我们使用多线程。在另外一个线程当中操作数据!
dispatch_async(dispatch_queue_create("background", 0), ^{
  Dog *theDog = [[Dog objectsWhere:@"age == 1"] firstObject];
  RLMRealm *realm = [RLMRealm defaultRealm];
  [realm beginWriteTransaction];
  theDog.age = 3;
  [realm commitWriteTransaction];
});`</pre>
</div>
如果你当前有使用Core Data的APP,并且你有准备使用我们的Realm,你可以去围观一下我们发布的文章--[点击这里查看详情](https://realm.io/news/migrating-from-core-data-to-realm/) &lt;-- 使用新窗口打开好吗?&#x1f60a;

## 开始装逼了!

首先,你需要下载[Realm Objective-C版本](https://static.realm.io/downloads/objc/realm-objc-0.98.6.zip) ,或者访问[Realm@GitHub](https://github.com/realm/realm-cocoa)

### 环境要求
  • iOS版本在7或者7以上,OS X系统在10.9或以上,WatchKit

  • Xcode版本在6.4或者以上

  • Objective-C,swift 1.2+都是可以支持Realm的

    安装方式

  • Cocoapods 方式,在Podfile当中添加依赖库

    `pod 'Realm'
执行pod install(或者update)

嗯,就是这么简单

  • 其它方式安装支持动态框架、Carthage、静态库(仅iOS支持),细节请点击网址Realm官方文档

混编Objective-C和swift的项目中使用Realm

如果你的项目是纯swift的,我们墙裂建议你是用Realm Swift版本

不过,放心,Objective-C版本的Realm在设计上是支持Swift和Objective-C混编的!在swift当中,你可以做任何你在Objective-C当中能做的事情,你可以方便的定义模型和并且使用Realm Objective-C的API。但是相比纯OC的项目,混编时,你需要注意一些事情详细请右键打开新Tab

tvOS

由于tvOS的目录是禁止写入的!所以,Realm的默认路径是NSCachesDirectory。蛋疼的是,tvOS随时可能会清理缓存文件!所以,我们建议你**在tvOS上使用Realm做缓存,而不是持久化!**

当然,你也可以把Realm文件放到APP程序目录中。但是,App store要求App大小在200MB以下!

更多的事情,请浏览我们tvOS的例子来查看更多(脱机缓存、预加载数据)。

Realm Browser

我们提供了一个独立的Mac App来编辑、查看.realm数据库。你可以从App store中下载到。

你可以生成一个带有测试数据的数据库,你只需要点击[Tools->Generate demo database]

如果你需要找到你App的Realm文件,你可以到StackOverflow去寻找答案。

Xcode插件

Realm插件可以很方便的在Xcode生成Realm model(如你在Xcode新建文件一样easy!)。

对于这么装逼的工具,使用Realm的话还是建议你安全一下的!下载最新的Realm objc包,解压之后,找到plugin/RealmPlugin.xcodeproj,使用Xcode打开它!

执行工程(Command + R)。完毕之后,再重启Xcode让插件生效!如果你在新建文件中可以看到Realm Model Object的文件类型,那么恭喜你,你成功了!

New Realm Model Object File

API 文档

关于Realm的所有类、方法、以及更多,你可以访问这里查看全部的API文档

示例

说了这么多,尽瞎BB,难道就没有一点代码吗?看这里,这里是官方提供的示例!

ps:这个文件在Xcode插件那一节下载的zip中也有!

使用帮助

有问题,问神奇海螺吧!(段子,请忽略!)

与全球码农为伍,建议问题提在Stack Overflow

发现bug,有新需求,请在GitHub写issue

–By HttpBin–