为rails应用程序构建iphone客户端的最佳方法是什么?

我有一个相当标准的rails应用程序,并希望能够从iPhone应用程序访问基本的CRUD(创建,更新,删除)操作以及我添加的查询。 Rails或多或少开箱即可为这些操作提供REST API。

在iphone上处理REST / XML部分的最佳方法是什么,是否有任何好的Objective-C库已经做过这种事情了? 操作还需要与特定用户相关联(即经过身份validation)。

这对我来说是一个常见的问题,所以我一直在研究一个名为ObjectiveResource的Rails ActiveResource框架的端口。

到目前为止,我们已经有两个版本的项目。 1.0已经被App Store中的一些应用程序使用,并且可以处理Rails中内置的默认to_xml和to_json资源处理。 1.01是一个错误修正版本和升级版本。

我们目前正在为1.1定义function集。 我们已经有很多想法 ,并且正在讨论邮件列表上的更多内容 。

我用钳子运气好了…

你需要安装plist-3.0.0 gem(gem install plist IIRC)

然后在你的控制器中你设置这样的东西:

plist = {'a' => 'b', 'c' => 'd', 'e' => {'f' => 'g', 'h' => {'i' => 'j'}}}.to_plist render(:text => plist) 

然后在你的iPhone应用程序设置这样的事情:

 NSURL *url = [NSURL URLWithString:@"http://somewhere.com"]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; NSURLResponse *response; NSError *error; NSData *plistData; plistData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; NSPropertyListFormat format; NSString *errorStr; id imagesToRate = [NSPropertyListSerialization propertyListFromData:plistData mutabilityOption:NSPropertyListImmutable format:&format errorDescription:&errorStr]; if(!imagesToRate) { NSLog(errorStr); } else { NSLog(@"%@", [imagesToRate objectForKey:@"e"]); } 

您几乎可以自由地使用json(例如,您不必滚动自己的xml方案来格式化数据,序列化就像to_plist调用一样简单)另外,sdk还带有本机代码用于处理Plist档案。

但是,如果你们都准备好了一个用json / xml输出的web服务,你可能想要保留它并只使用已经提到的东西解析iphone上的东西(TouchXML,json-framework)

最好的办法是在NSURLConnection周围编写一个简单的包装类,为您的API设置特定的东西。 它并不是特别复杂,它可以让您直接根据您要定位的REST API定制类的API。 您的类可以有一个init方法,如initWithMethod:delegate:params:其中委托是想要异步接收结果的对象,params是所有参数的NSDictionary。 您还可以使用类上的属性来设置身份validation(或让您在登录后让类自己发现并记录)。

至于解析XML,我建议你查看TouchXML 。

如果你不喜欢解析XML(以及谁呢?)并且可以配置后端来吐出JSON而不是XML,我强烈建议使用json-framework等库。 将数据读入对象要比通过XML节点解析要容易得多。

我最近整理了一个使用NSURLConnection的TouchJSON示例。 这是非常基本的,但应该足以让你开始使用asych加载。

http://github.com/twoism/touchjsonexample/tree/master

小心在iPhone上使用NSURLConnection。 众所周知,内存泄漏会导致应用程序崩溃。 如果您正在执行大量HTTP请求,请不要指望NSURLConnection可以为您工作。 找到别的东西,可能是一些curl包装。