我一直在修改一些代码,以便在Mac OS X和iPhone OS之间工作.
我遇到了一些使用NSURL's URLByAppendingPathComponent:(在10.6中添加)的代码,有些人可能知道,这些代码在iPhone SDK中不可用.
我的解决方案是在OS之间使用这个代码
NSString *urlString = [myURL absoluteString];
urlString = [urlString stringByAppendingPathComponent:@"helloworld"];
myURL = [NSURL urlWithString:urlString];
Run Code Online (Sandbox Code Playgroud)
这样做的问题是NSString的stringByAppendingPathComponent:,似乎除去的/一个人从HTTP S:URL的一部分//.
这是预期的行为还是错误?
好的,所以我有点太快问上面的问题了.我重新阅读文档,它确实说:
请注意,此方法仅适用于文件路径(例如,不是URL的字符串表示)
但是,如果您需要将路径组件附加到iPhone上的URL,它不会为正确的方向提供任何指示...
我总是可以手动执行,添加/如果需要和额外的字符串,但我希望尽可能接近原始Mac OS X代码...
该"太长;没有读"版本:有没有什么办法来禁用自动滚动行为UIScrollView讲的时候UITextField到becomeFirstResponder?
我有一个启用分页的滚动视图和几个视图作为子视图,每个子视图由其自己的视图控制器控制.每个子视图都有一个UITextField.
要求是当页面滚动到视图中时,它的文本字段应该成为第一响应者.
使用手指滑动滚动时这很好 - 我使用滚动视图委托方法scrollViewDidEndDecelerating:知道滚动停止和页面在视图中时,我可以告诉文本字段成为第一响应者.
但是,当滚动视图被"自动滚动"时,如在告知scrollRectToVisible:animated:滚动视图时,不调用用于减速的滚动视图委托方法.在将新创建的页面滚动到视图中而没有用户的交互,或者用户点击时,我使用此方法UIPageControl.
我的解决方案是在告诉它滚动到视图之前简单地设置文本字段的第一个响应者状态 - 但似乎告诉滚动视图中的文本字段成为第一个响应者会导致滚动视图自动将其滚动到视图中.
我假设这是在表视图单元格中放置文本字段时使用的行为(因为表视图是滚动视图子类).如果您设置一个小型测试应用程序,具有表格视图和表格单元格中的文本字段,如果键盘在成为第一响应者时会遮挡表格视图单元格,则表格视图将自动滚动它以使其可见.
但是,我不明白为什么在我的示例中出现这种情况,我没有使用表视图 - 只是一个简单的滚动视图.
我还要提一下,我的滚动视图已禁用垂直滚动,只能水平滚动.
我已经在另一个测试应用程序中进行了测试,该应用程序将文本字段作为scrollview的直接子视图(没有视图控制器或容器视图),同样的情况发生.如果您告诉屏幕外的文本字段成为第一响应者,则滚动视图会自动为您滚动它.
这通常不会成为问题,但似乎搞砸了滚动视图的分页.当我用手指滚动时,每个视图都会反弹并正确居中.但是当我滚动一个矩形以使动画可见并告诉文本字段成为第一响应者时,滚动视图似乎与自身发生冲突,并且视图仅滚动到视图的一部分,并且不居中.
然后,如果我用手指触摸视图(不滑动,甚至移动),滚动视图会跳回到第一页.
我目前对所有这些愚蠢的自动滚动行为的解决方法是使用a NSTimer来确定何时更新第一个响应者.
我在代码中使用手动滚动,scrollRectToVisible:animated然后在0.3秒后,调用我的方法将文本字段更新为第一响应者.(0.3秒是试验和错误,试图看哪,这似乎是允许动画的最小时间,但仍然足够长,不会导致与scrollview的冲突.
正如你所看到的,这并不优雅,而且可能会破裂.
有没有什么办法来禁用自动滚动行为UIScrollView讲的时候UITextField到becomeFirstResponder?
我的应用程序需要具有可变高度表格单元格(因为每个表格单元格的高度不同,而不是每个单元格都需要能够自行调整大小).
我有一个目前有效的解决方案,但它很笨拙而且很慢.
我目前的解决方案
在呈现表格单元格之前,我通过调用诸如-sizeWithFont:constrainedToSize:其数据之类的大小调整方法来计算每个单元格需要多高.然后我将高度加起来,允许一些填充并将结果与数据一起存储.
然后,当我的UITableViewDelegate接收到-tableview:heightForRowAtIndexPath:我的工作时,将为该单元格呈现哪个项目并返回我之前计算的高度.
正如我所说,这是有效的,但是-sizeWithFont:constrainedToSize:当你按顺序对数百个项目进行调用时调用非常慢,我觉得它可以做得更好.
因此,为了实现这一点,我必须维护两部分代码 - 一部分用于计算单元格高度,另一部分用于在时间到来时实际绘制单元格.
如果关于模型项的任何更改,我必须更新这两个代码块,并且现在又一次它们仍然不能完美匹配,有时会导致表格单元格对于给定项目而言略微过小,或者也是如此大.
我建议的解决方案:
所以我想取消预先计算细胞高度.A)因为它打破了MVC范式而B)因为它很慢.
因此,我的细胞自我吸收,因此,最终得到正确的细胞高度.我的问题是,我无法告诉桌子在绘制之前查看单元格的高度 - 到时为止已经太晚了.
我尝试-cellForRowAtIndexPath:从内部调用,-tableView:heightForRowAtIndexPath:但这会陷入无限循环,因为第一个在某个时刻调用第二个,反之亦然(至少这是我在尝试时看到的).
所以这个选项是不可能的.
如果我没有在行委托方法的高度中指定大小,那么表视图就变得棘手了.细胞是完美的高度,但它们的x位置是固定高度的细胞.
Messed Table Cells http://jamsoftonline.com/images/messed_table_cells.png
注意底部单元格的大小是正确的 - 它只是与前一个单元格重叠,而前一个单元格与之前的单元格重叠,依此类推.
同样使用这种方法,在滚动时会出现一些伪像,我认为这些伪像可能与单元格的重用标识符有关.
所以在这里的任何帮助将不胜感激.
我正在使用Apple托管的内容实施应用内购买.以前我使用Urban Airship来托管我的内容,并使用他们的SDK来提供应用内商店UI和购买功能.
由于Urban Airship今年7月停止了对IAP的支持,我需要更换它.
Urban Airship SDK支持更新购买的内容.我看到StoreKit提供了这个功能(至少在一定程度上)但不确定如何正确实现内容更新本身.
SKProduct有一个downloadContentVersion指定可从Apple下载的内容版本.我会跟踪应用程序当前下载的版本 - 所以我知道何时有更新.
我坚持的部分是如何实际下载更新的内容?
我的第一个想法是为特定的购买做一个恢复,但似乎没有办法恢复单个产品(只有所有产品).第二个想法只是重新购买产品,但这会向用户发出警报,表明他们将再次收费 - 但是,他们不会被收费,因为重新购买后会显示另一个警报,通知用户内容已经购买并将免费重新下载 - 但对我而言,这感觉就像一个糟糕的用户体验,他们可能不一定知道在同意购买之前不会再收取费用.
文档说不是自己创建SKDownload实例,所以我不能只创建一个并将其添加到下载队列.
在使用Apple托管的内容时,我应该如何为应用内购买实施内容更新?
因此,正如你们许多人可能已经知道的那样,CommonCrypto不再包含在iPhone SDK中(如3.0).
我还能在哪里轻松掌握MD5功能?我是否必须将OpenSSL编译到我的项目中才能获得MD5?
一些澄清:
如果我可以使用SHA256,我会的.我全力以赴,但我不能改变API.
看来我错了.CommonCrypto 是仍然在iPhone SDK,因为它使用的是只是没有明确地.我一直在寻找libCrypto库来包含在我的项目中.我不知道您可以包含CommonCrypto标头而不链接库...
我有一个应用程序,将在UIWebView中显示网页.它显示的页面可能包含App Store上其他iPhone应用程序的链接.
在桌面计算机上的普通浏览器中,单击这些App Store链接将带我浏览多个URL重定向,最终打开iTunes并将我带到该应用程序的页面.
有没有办法确保在我的UIWebView中单击App Store链接时,iPhone上的App Store应用程序将打开并显示应用程序?
我在测试中看到的是,有几种类型的链接可以导致App Store页面,其中包括:
当我在桌面浏览器中打开任何这些链接时,它们将工作并最终打开iTunes.当我从iPhone中打开任何这些链接时,UIWebView会经历许多重定向,最终会发生以下两种情况之一:
我唯一能够让App Store应用程序打开的方法是使用应用程序的直接iTunes链接,无需任何推荐或重定向.
显然,对于推荐或联盟链接,我不想删除推荐ID或联盟ID.如果是他们点击的链接,我不应该剥夺他们的推荐.
所以任何帮助将不胜感激.
谢谢.
我想对核心数据NSSet的数据进行排序(我知道我们只能用数组做,但让我解释一下......).我有一个实体用户与实体配方有很多关系.配方具有属性名称和ID.我想得到这样的数据:
NSArray *id = [[user.recipes valueForKey:@"identity"] allObjects];
NSArray *name = [[user.recipes valueForKey:@"name"] allObjects];
Run Code Online (Sandbox Code Playgroud)
如果我在两个数组中的索引1处获取对象,它们对应于相同的配方...
谢谢
在Objective-C中,当您声明一个实例变量时,您可以检查它是否符合编译时分配的协议,如下所示:
id <MyProtocol> variable;
Run Code Online (Sandbox Code Playgroud)
是否有可能在编译时检查分配给变量的对象是否符合两个单独的协议?如:
id <MyProtocol, MyOtherProtocol> variable;
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用conformsToProtocol:and respondsToSelectoral等进行运行时检查(我在实际使用对象之前做的是为了增加安全性),我可以编写自己的setter方法进行检查,但我想在编译时知道.
我一直在研究使用UIPageControl作为应用程序的滚动部分,我想知道它是如何工作的.文档显示了更改页面,设置页面数等的方法,但页面控件本身并不包含任何类型的滚动视图.
UIPageControl和UIScrollView类是否应该在想要显示页面指示符时一起使用(比如在带有应用程序页面的iPhone主屏幕上)?
我有一个自定义对象,只是继承自NSObject.它有3个成员 - 两个花车和一个NSDate.
我的应用程序将有一个数组,其中包含许多这些对象,我需要在运行之间保持它.我怎么能做到这一点?
我曾经考虑过使用SQLite数据库,但我认为它有点过分,因为我做过的唯一查询就是select *.
在理想的世界中,我想使用xml plist文件.我不确定我是否可以使用自定义对象执行此操作.我知道有一组属性列表对象,并且NSArray属于这个对象,但writeToFile:atomically:仅适用于属性列表对象.
任何想法将不胜感激,谢谢!
iphone ×8
objective-c ×4
cocoa ×2
cocoa-touch ×2
scroll ×2
compile-time ×1
core-data ×1
database ×1
ios ×1
macos ×1
md5 ×1
nsstring ×1
paging ×1
persistence ×1
plist ×1
protocols ×1
sorting ×1
uikit ×1
uiscrollview ×1
uitableview ×1
uitextfield ×1
uiwebview ×1