这是一个关于如何设计与网站交互的应用程序的问题。
我有一个查询网站信息的应用程序,使用异步 NSURLConnection 完成(我认为这是 iOS 中的首选方法)。有问题的网站没有 api/web 服务接口(interface)。交互就像浏览器一样完成,发送请求,接收答案,解释答案以确定下一步操作。
该站点还使用用户名和密码进行保护并且确实如此。所以当我想与网站互动时(比方说,用例如:“获取照片列表”、“下载照片”、“上传照片”)我需要先登录,完成后我会注销.
我想这样写我的函数(但我很乐意接受建议,也许我看错了)
login
if login successful
get list of photos
logout
然后当用户要求时我想
login
if login successful
download photo
logout
我遇到的问题是,每次您触发 NSURLConnection 时,都会在 -connectionDidFinishLoading 中收到回复。所以我需要保持某种状态以知道下一步该做什么,这个登录是为了获取照片列表,还是为了下载照片。
现在,问题不是我不能让它工作,问题是如何干净高效地设置这样的东西,以便它可以扩展,以便它可以支持 20 多个甚至 50 多个用例,并且仍然是易于维护。强调并非所有用例都像上面说明的那样简单。
我正在努力实现的一个例子是 facebook 应用程序。该应用程序还需要登录到 facebook 以支持各种用例,例如发布项目、下载帖子、点赞帖子、上传照片等等。他们是如何设计出这样的东西的?
最佳答案
如果问题是如何登录到您的服务器,实现细节将根据您的服务器如何验证“登录”而略有不同。一种模型是简单的 HTTP POST。另一个型号是authentication challenges如 URL 加载系统编程指南中所述。
如果您不知道您的 Web 服务器采用了哪种样式,您通常可以通过从您的 Web 浏览器尝试使用 URL 访问其中一个安全文件来弄清楚。如果您看到如下屏幕,您的服务器正在使用身份验证挑战:
如果您没有看到 Web 浏览器生成的弹出窗口,而是看到类似 HTML 的“请登录”消息,那么您可能必须执行 POST 登录过程。请注意,如果您的服务器正在使用此类流程,并且通过 HTML 页面报告登录成功或失败,那么让您的应用程序解密会有点麻烦。如果您有一个提供 JSON 或 XML 响应而不是 HTML 响应的登录页面版本,那将是理想的选择。我不知道您是否有能力在您的服务器上执行此操作,但如果您可以那样做,将大大简化您的 iOS 开发。
如果您通过 POST 登录,请参阅 SimpleURLConnections sample app用于演示如何对您的 Web 服务器发出简单的 POST(和 GET)请求。
参见 AdvancedURLConnections sample app有关如何处理身份验证挑战的示例。
关于iOS网站交互(NSURLConnection)设计/模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13895208/
我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende
我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数
这可能是个愚蠢的问题。但是,我是一个新手......你怎么能在交互式rubyshell中有多行代码?好像你只能有一条长线。按回车键运行代码。无论如何我可以在不运行代码的情况下跳到下一行吗?再次抱歉,如果这是一个愚蠢的问题。谢谢。 最佳答案 这是一个例子:2.1.2:053>a=1=>12.1.2:054>b=2=>22.1.2:055>a+b=>32.1.2:056>ifa>b#Thecode‘if..."startsthedefinitionoftheconditionalstatement.2.1.2:057?>puts"f
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下
在Ruby中可以使用哪些替代方法来ping一个ip地址?标准库“ping”库的功能似乎非常有限。我对在这里滚动我自己的代码不感兴趣。有没有好的gem?我应该接受它并忍受它吗?(我在Linux上使用Ruby1.8.6编写代码) 最佳答案 net-ping值得一看。它允许TCPping(如标准rubyping),但也允许UDP、HTTP和ICMPping。ICMPping需要root权限,但其他则不需要。 关于ruby-Pingruby网站?,我们在StackOverflow上找到一个类
我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的
给定一个复杂的对象层次结构,幸运的是它不包含循环引用,我如何实现支持各种格式的序列化?我不是来讨论实际实现的。相反,我正在寻找可能会派上用场的设计模式提示。更准确地说:我正在使用Ruby,我想解析XML和JSON数据以构建复杂的对象层次结构。此外,应该可以将该层次结构序列化为JSON、XML和可能的HTML。我可以为此使用Builder模式吗?在任何提到的情况下,我都有某种结构化数据-无论是在内存中还是文本中-我想用它来构建其他东西。我认为将序列化逻辑与实际业务逻辑分开会很好,这样我以后就可以轻松支持多种XML格式。 最佳答案 我最
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里