1
lzyroot 2015-07-11 11:30:56 +08:00
抛弃它把,用FMDB
|
2
yiplee 2015-07-11 13:15:08 +08:00 via iPad
推荐用 Magical Record 来处理 Core Data,方便很多。
|
3
a412739861 OP |
4
yiplee 2015-07-11 14:03:27 +08:00
@a412739861 objc 的这期 issue http://www.objc.io/issues/4-core-data/ 不错
|
5
jianzong 2015-07-11 15:39:13 +08:00 via iPhone 1
有一段时间没用core data了,似乎你上面打印出来的storylist还包含了entity的信息,可以在你后来成功使用的地方,再打印一个看看是不是一样。应该是哪里没设置对,没有转化为NSObject的对象吧。
|
6
a412739861 OP @yiplee 嗯嗯,惭愧呢,这个专题在objc中文的上面看了些。处于有些明白,又有些迷糊的状态。
感觉是通过momd文件和model,context,persistence的几个属性设置好,把对应类的实际内容写在了文件上。 不知道这种想法对不对。 Core data设计三个属性的设置好了,就可以很便捷的存储和提取内容了。 甚至我直接把那些设置的内容从一个初始化带有Core Data的appdelegate里面直接复制出来,就可以直接使用。似乎还导入appdelegate,用他里面的context也可以方便的存取。 所以感觉Core Data的代码虽然很麻烦,但是其实很固定,忽略这一长串的代码的话,存储和读取的操作,还算简单。 @jianzong 对头,有这种感觉,提取出来的是一个数组,而单个对象应该我的storylist class的实例。但是controller并不知道这是我属于storylist的类,虽然用for storylist in result倒是不报错,但是打印title属性就null。 当存取整合在一个class的情况时,提取数据的方法放在datamanager class里。在这个方法的结尾,返回数组之前,我尝试用for Storylist *story in result(取出的数组),是可以正确的打印每一个的story.title。 在controller里面,title打印不出来,但是单个对象可以打出上面的那一串内容。 所以可以认为在controller里面得到那串数组后,controller并不知道其中的单个对象是什么类,而在datamanager得到result时,他是知道这是一个一串NSObjec/storylist的内容,所以只打印title属性可以完成。 教程似乎都没有着重提醒过,如何转化……请问,一般情况进行转化是进行了什么步骤,不直接返回提取的数据结果? 在提取的result数组里面,在进行一次for storylist in result的遍历,然后把项目添加到另一个数组,可行么?(我在另外一个demo里面看到了这一部分,但是又不完全一样。这串处理在单独的datamananger class中进行,即使处理了,后续的controller里不应该一样不知道么?) 提到说是要进行一番处理,转头翻《iOS编程》,书上把数据存取等的操作,整合在了一个class里的。 他在得到了result数组后,把他直接赋值给了自己的一个属性叫privateItems,也是数组。当外部需要读取就返回这串数组的copy。他的逻辑层,绕了很多。的确,在他的这个privateItems,可以进行对item的数据处理。 不过书上的也很奇怪,他获得这串数组,其中每个对象item,赋值给cell.textlabel.text = [item description]这个方法写在的item的m文件里面,应该属于私有的方法,不应该在外部调用。不知道是不是因为这是重写了父类NSObject的description方法,所以可以这么调用。 写的太多了,也不指望能看完>_<,就一句话,一般的话,如何转化NSObject…… |
7
yiplee 2015-07-11 19:19:03 +08:00 1
@a412739861 Core Data 难道不是自动转成 NSManagedObject 的吗? Json 的话可以 Json -> NSDictionary / NSArray -> NSManagedObject ,其中后面一步可以用 Magical Record , 见文档 : https://github.com/magicalpanda/MagicalRecord/blob/master/Docs/Importing-Data.md
|
8
a412739861 OP @yiplee 说的是提取出来的数据results,不是一串数组么,我用Core data自动生成的storylist类进去遍历,for storylist *story in results,不能打印story.title的属性。所以那位说可能是数组里面的单个对象没转化成storylist的意思。
而不是存进去的时候,存进去的时候,json是一个个转化好了。 现在看看,似乎都用第三方库更简单方便。之前就是想,刚开始学就统统用第三方库,把所有内容全给隐藏,似乎学有点不太合适。(其实还是直接就用上AFNetworking了……)。 |
9
yiplee 2015-07-11 20:29:19 +08:00
NSFetchRequest 的 returnsObjectsAsFaults 默认是 YES ,fetch 前设置成 NO 试试。
|
10
a412739861 OP @yiplee 看样子得学版本控制了……复原后,把这个值设置成NO,打印出来的也是一样。
观察了下教程代码,我感觉是NSFetchRequest后得到的results好像都经过了一些处理,比如《iOS编程》里面,itemstore进行提取的,results他放进了itemstore的一个数组属性里面(虽然我感觉没区别……)。 虽然不明白为什么,但是我这样在tableviewcontroller的类调用的时候,得到的数组,直接打印firstObject,是有内容的。 而且和我后面把数据提取放在tableviewcontroller里面,直接打印数组的第一个对象内容是一样的。区别在于把fetchrequest放在后者时,用for in可以打出其中的title属性。 感觉我也只能乖乖的把results处理处理(虽然不太清楚如何处理,继续找参考),或者吧fetchrequest放进要用到的数据里面才好…… anyway,感谢回复,感觉我啰里啰嗦,可能连问题也没解释清楚…… |
11
victorylau808 2015-07-12 09:02:41 +08:00
@lzyroot FMDB比coreData好用? 我怎么感觉这么SQL语言好烦。。。虽然可以带Jsonmodel (本人也是初学者) 我也纠结这两种东西用哪种比较好。
|