1
alexrezit 2013-02-04 22:35:42 +08:00
没懂楼主要做什么, 不过我觉得 Stanford CS193P 课程的第一课十有八九能解决你的问题.
苹果官方的文档还是不错的, 用惯了他们的文档再搞 web.py 差点吐血三升. (于是至今不咋会 Python... =-= |
3
alexrezit 2013-02-04 23:05:09 +08:00
|
7
virushuo 2013-02-05 00:01:46 +08:00
restkit是个好东西。如果你的model能完全对上api模型,那么用restkit直接管理数据层没问题。但自己多少还是要明白Core Data的。
另外restkit新版变化不小,要注意兼容问题。 |
8
notedit OP |
9
virushuo 2013-02-05 00:11:11 +08:00
@notedit
开源的例子好像没有,我也是慢慢试着来的。有问题就去翻讨论组,各种问题都有问到。 组合起来的大概就是这样:比如你有一个Meta的Mapping ,要嵌入其他对象里面,就这样映射。 [manager.mappingProvider setObjectMapping:[Mapping MetaMapping] forKeyPath:@"meta"]; 另外我还没迁移到最新,新的情况我还不太知道(如果用了AFNetworking就是新版) |
12
Livid MOD |
14
ewangke 2013-02-05 03:24:15 +08:00
@notedit
iOS的开发要设计先行,先把UI、交互、体验设计好。 如何请求数据,如何设计数据层是之后的事情。 关于代码结构: 一般来说数据层只负责获取数据,UIController是负责交互行为的,视图一般使用标准控件或者第三方组件这些可重用的组件,很少直接写UIView。 关于数据层内部的结构: 猜楼主是做网络应用吧。一般api请求返回的都是json/plist这些结构化的数据。 几种思路(由易至难): 一、直接使用NSDictionary/NSArray(稍复杂的产品不推荐) 二、无Model相关的类,完全在api request的callback里面更新UI部分(限制太多了,写到后面经常发现搞不定) 三、自己使用NSObject定义一套同构的类来表示数据(好处:编译器的类型检查;坏处:写一堆代码) 四、使用ObjC Runtime,利用反射/自省的机制,动态生成property(好处:少写很多无聊的代码;坏处:运行时才发现property存在问题) 我倾向的方案是三;如果Model太复杂,建议写一个脚本,根据api的规则,编译期自动生成Objective-C的Model类; PS: @Livid推荐的Parse,做做原型还好,挺方便的。这种平台会把服务器端绑死,而且第三方的SDK能少则少。App不是Web,bug上线了就是上线了;审核至少要7天吧... |
15
ewangke 2013-02-05 03:27:26 +08:00
@notedit
补充一下,上面我说的第四种方案,是最“酷”的方案。很多时候,这种方式非常方便(尤其是维护阶段)。 但它最大的问题就是不直观,而且对工程师水平要求较高(大概比例是每100个Objective-C工程师,20个听说过这种方法,敢碰的不到5个,真正用好的能有一个就不错了)。 楼主既然练手,就都试试,没坏处。 |
16
myrual 2013-02-05 09:01:24 +08:00
@ewangke 四、使用ObjC Runtime,利用反射/自省的机制,动态生成property(好处:少写很多无聊的代码;坏处:运行时才发现property存在问题)
能解释一下什么意思么?或者给个例子? |
17
sharpnk 2013-02-05 09:49:53 +08:00
- 使用restkit的model map 来做Model的解析 从api取得数据之后转化为数据Model
这个步骤restkit的object mapping+coredata完全可以一步到位. 而且像你这样API和客户端均在可控范围内的情况,选这个组合基本就是个no brainer. 刚开始的学习曲线比较陡,但熟悉了之后能省下你很多的时间。另外它其实自己就带了不少实例代码,我基本就是靠着那几个示例外加它自带的文档一路摸索下来的。社区方面, SO还好一些, 我在restkit那个google group基本得不到任何有价值的答复。 这个是用restkit+coredata做的: https://github.com/bendyworks/TravisCI.app |
18
PrideChung 2013-02-05 09:51:19 +08:00
@ewangke 第四种方案是指利用KeyValueCoding自动生成property?
我发现可以用CoreData的代码生成器来生成Model Object,如果不需要持久化的话就把Transient勾上,这样还能利用到CoreData的其他功能,例如validation,relationship,不知道能不能算是方案5。 RestKit我觉得偏重了,还是倾向于使用AFNetworking,自己做Mapping的工作。 |
21
notedit OP @PrideChung 能给个使用你这种方法的例子么 或者 开源代码
|
22
notedit OP @ewangke 谢谢你的建议 因为我现在找不到很多设计资源 所以做法是先用原生UI 把原型做出来 然后找设计设计UI.
我的应用相对小一些 可能你说的第三种方案最适合我 在建立model方面能不能给我一点代码看 |
23
krafttuc 2013-02-05 12:25:47 +08:00
我觉得Cheddar for iOS(https://github.com/nothingmagical/cheddar-ios)的代码挺清晰的,可以参考看看。数据层用的是Core Data,见CheddarKit。
整个过程基本上就是用AFNetworking拉数据,解析,然后扔到Core Data做持久化。如果用到table view之类的还能用NSFetchedResultsController delegate来更新UI。 |
25
ydhydh 2013-02-05 16:12:54 +08:00
JSONModel 是个不错的选择
https://github.com/icanzilb/JSONModel |
26
ydhydh 2013-02-05 16:16:42 +08:00
如果需要CoreData, 推荐看下:
https://github.com/keithpitt/DKPredicateBuilder https://github.com/keithpitt/DKCoreData 主要是查询的链式语法 |
27
ewangke 2013-02-05 16:29:25 +08:00
@myrual
@alexrezit @PrideChung 刚学的两个中文术语,我是指Reflection/Introspection,详见: http://www.mirageapps.com/whats-new/articles/introspection-reflection-and-swizzling-in-objective-c Model的例子,可以看看这个(需要你手写每个Model的类,这样才有compile time的checking): https://github.com/MugunthKumar/MKFoundation |
29
ewangke 2013-02-05 16:41:51 +08:00
想试试Core Data,可以用MagicalRecord
https://github.com/magicalpanda/MagicalRecord |
31
BigZ 2013-02-05 17:06:34 +08:00
你想的太复杂了
ios主要考虑UI展现和交互的问题 千万不要自己写entity class,用list或者dict足以,要持久化存储就用plain 文件或者sqlite |
33
lldong 2013-02-06 12:23:39 +08:00
推荐GitHub的Mantle,轻量方便
|
34
notedit OP |
35
jackfan 2013-02-11 07:30:23 +08:00
用core data是disaster
|