我正在研究构建一个与在线工作一样离线的应用程序.由于应用程序在脱机时无法与服务器通信,因此需要进行某种程度的同步.
在计划iPhone同步的离线操作时,有哪些好的工具可供阅读并开始考虑?
我必须自己创建哪些工具,而不是苹果已经提供的工具来帮助解决这个问题?
我有一个NSDictionary,其中每个键指向一个数组.我后来想要将所有值合并到一个数组中.有没有办法使用API来做一些比说更有效的事情:
NSArray *anArray = [someDictionary allValues];
NSMutableArray *newArray = [NSMutableArray array];
start outter loop on anArray
start inner loop on objects in anArray
add objectAtIndex to newArray
Run Code Online (Sandbox Code Playgroud) 我正处于一个应用程序的设计阶段,该应用程序将使用REST Web服务,并且就使用异步vs同步与线程而言有点两难.这是场景.
假设您有三个选项可供深入研究,每个选项都有自己的基于REST的资源.我可以通过同步请求懒洋洋地加载每个请求,但这会阻止UI并阻止用户在检索数据时点击后退导航按钮.这种情况几乎适用于除应用程序需要登录屏幕之外的任何地方.由于这个原因,我看不出有任何理由使用同步HTTP请求与异步.唯一有意义的是让工作线程发出同步请求,并在请求完成时通知主线程.这样可以防止阻塞.接下来的问题是基准标记您的代码并查看哪些代码具有更多开销,线程同步请求或异步请求.
异步请求的问题是您需要设置智能通知或委派系统,因为您可以在任何给定时间对多个资源发出多个请求.它们的另一个问题是,如果我有一个类,比如一个处理我所有数据的单例,我就不能在getter方法中使用异步请求.意思是以下不会:
- (NSArray *)users {
if(users == nil)
users = do_async_request // NO GOOD
return users;
}
Run Code Online (Sandbox Code Playgroud)
而以下内容:
- (NSArray *)users {
if(users == nil)
users == do_sync_request // OK.
return users;
}
Run Code Online (Sandbox Code Playgroud)
你也可能有优先权.我的意思是优先考虑的是,如果你在iPhone上查看Apple的Mail应用程序,你会发现他们首先吸取你的整个POP/IMAP树,然后再发出第二个请求来检索你的消息的前两行(默认).
我想我的专家问题是这个问题.您何时使用异步,同步,线程 - 何时在线程中使用异步/同步?您设置了什么样的委派系统来了解异步请求完成时要执行的操作?您是否优先考虑异步请求?
对于这个太常见的问题,有一系列解决方案.破解一些东西很简单.问题是,我不想破解,我希望拥有一些简单易用的东西.
我正在寻找一个与POP3/SMTP服务器对话的示例应用程序.而不是用BSD套接字和CFNetwork类型调用来重新发明轮子,我很好奇是否有任何开源库已经处理了大量的脏工作?我已经尝试过谷歌搜索,没有任何运气.
也许有一些东西我忽略了简化这一点.
谢谢.
我的问题如下.我有一个简单地采用XML摘录和XPath的方法.然后它应该为我创建一个XML摘录的对象数组.这意味着如果我传递了以下XML:
<user>
<name>Bob</name>
<age>50</age>
</user>
Run Code Online (Sandbox Code Playgroud)
我的方法将实例化User类的实例,并使用键值编码来设置实例变量.这是相当直接的.唯一的问题是我来自大多数脚本背景,并试图看看是否可以将方法传递给类名.现在它正在做一个User类,后来它可能是一个Cars类,然后是一个Home类.在保持代码尽可能抽象的同时,从这种不同类型的方法实例化对象的最佳方法是什么?
目前是否可以从第三方iPhone应用程序转到Apple的设置应用程序?目前可以打开邮件,野生动物园等.设置怎么样?
使用以下表示法创建字符串时:
NSString *foo = @"Bar";
Run Code Online (Sandbox Code Playgroud)
是否需要发布foo?或者foo在这种情况下自动释放?
我正在寻求从我的服务器到我的iPhone应用程序建立某种套接字/ COMET类型功能.基本上,每当用户设法在服务器上设置任意对象'脏'时,例如,更新他们的地址......反馈应该从服务器推送到任何保持对服务器进行实时轮询的客户端.我想这是一个流行词,就是COMET.我知道网页浏览器应用程序有DWR,所以我想,也许最好在我的每个控制器中设置一个隐藏的UIWebView,这样我就可以从他们的javascript框架中开箱即用COMET了?有更优雅的方法吗?
我有一个问题,当在a textField中单击a时UITableViewCell,该方法tableView:didSelectRowAtIndexPath:不会被调用.问题是,我需要将我滚动tableView到正确的位置,否则键盘会在第一个响应者上方.
我必须像这样移动代码:
[[self tableView] scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];
Run Code Online (Sandbox Code Playgroud)
进入我的tableView委托方法和我的UITextField委托方法,textFieldDidBeginEditing:.
是创建新方法的最佳方法,将单击的单元格/文本字段的indexPath传递给它,并从tableView委托和UITextField委托调用该方法?更好的办法吗?
什么可能导致'git push'尝试并提交两个分支?我有自己的分支,我正在研究共享仓库和主分支.现在我只是想推到我的个人分支,经历了很好,但它也试图推动掌握并被拒绝.看起来像这样:
foo$ git push
Counting objects: 38, done.
Delta compression using 2 threads.
Compressing objects: 100% (19/19), done.
Writing objects: 100% (21/21), 9.73 KiB, done.
Total 21 (delta 14), reused 0 (delta 0)
To ssh://example.com/project.git
8184634..86b621e mybranch -> mybranch
! [rejected] master -> master (non-fast forward)
error: failed to push some refs to 'ssh://example.com/project.git'
Run Code Online (Sandbox Code Playgroud)
我的配置如下所示:
remote.origin.url=ssh://example.com/project.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master
branch.mybranch.remote=origin
branch.mybranch.merge=refs/heads/mybranch
Run Code Online (Sandbox Code Playgroud)
埃斯科指出,它正在推动两者,因为它们在我的配置中.如果我想要同时推动两者,而不是同时推动怎么办?当我检查mybranch并且git push时,我显然意味着推动mybranch而不是掌握.有时候我会检查master,编辑代码,并且还想提交/推送它.有两种方法可以共存吗?
cocoa-touch ×8
iphone ×7
objective-c ×7
cocoa ×4
comet ×1
foundation ×1
git ×1
http ×1
literals ×1
nsstring ×1
pop3 ×1
rest ×1
xml ×1