我最近发现我的UIWebView在ITMS链接上窒息.具体而言,在我的应用程序中的UIWebView,如果我浏览到一个网站,如这一个,然后单击"可用在App Store上的"链接,将UIWebView的错误了"错误域= WebKitErrorDomain代码= 101的网址不能显示".
经过一段谷歌搜索,我意识到我需要捕获应用程序链接的请求并让iOS处理它们.我开始时查看该方案是否以"itms"开头-webView:shouldStartLoadWithRequest:navigationType:,但意识到系统可以处理其他类型的应用程序链接.所以我想出了这个,相反:
- (void)webView:(UIWebView *)wv didFailLoadWithError:(NSError *)error {
// Give iOS a chance to open it.
NSURL *url = [NSURL URLWithString:[error.userInfo objectForKey:@"NSErrorFailingURLStringKey"]];
if ([error.domain isEqual:@"WebKitErrorDomain"]
&& error.code == 101
&& [[UIApplication sharedApplication]canOpenURL:url])
{
[[UIApplication sharedApplication]openURL:url];
return;
}
// Normal error handling…
}
Run Code Online (Sandbox Code Playgroud)
我有两个问题:
-webView:shouldStartLoadWithRequest:navigationType:,它不会发生,所以它有点烦人.如何你处理这些请求?
我意识到我可以点击https://api.github.com/users/:user_id/repos获取我拥有或分叉的所有回购的清单.但我想要做的是弄清楚我去年所做的所有项目(提交,拉取请求,问题等).该事件API让我得到最后的300个事件,但我已经贡献了很多在过去十二个月不止于此.这可能吗?
在Apple的消息应用程序中,当您单击通讯员的名称并切换到对话的表格视图(每个消息都有气球)时,表格会一直滚动到最后.没有动画或任何东西,它就在那里.
同样,在Tweetie 2中,当您加载推文视图时,它会显示在您上次查看它的位置.没有动画到达那里,它就在那里,好像上面没有任何单元格被加载.
这些应用程序如何做到这一点?他们scrollToRowAtIndexPath:atScrollPosition:animated:在桌面控制器的某个地方打电话吗?如果是这样,他们怎么知道要传递给atScrollPosition:谁?它叫什么方法?
我的iPad应用程序具有从Feed中填充的UITableView.与大多数RSS阅读器一样,它以反向时间顺序显示博客帖子的链接列表,其标题和每个帖子的摘要.Feed经常更新,并且非常大,大约有500个帖子.我正在使用libxml2推送解析来有效地下载和解析NSOperation子类中的feed,构建入口对象并随时更新数据库.但后来我需要更新UITableView.
到目前为止,应用程序一直在为解析的每个帖子更新UITableView.解析器在主线程上执行选择器来完成这项工作.但是如果需要更新很多细胞,这会导致几秒钟的严重滞后.我可以通过在后台线程上运行表更新来缓解这种情况,但似乎这不是一个好主意.所以现在我想弄清楚如何在主线程上更有效地更新表.
我可以reloadData在解析所有帖子时调用,但它不是非常用户友好:没有动画来指示任何内容已经发生变化,只是一个闪存并且新数据就在那里.我宁愿让它动画显示添加新帖子和删除旧帖子.未从Feed中删除的现有帖子应该通过顶部显示的新帖子向下推.
我知道这是可能的.举个例子,Byline做得很漂亮.每个帖子一次一个地添加或删除UITableView,没有显示表格背景的间隙.所有这一切都没有让UI在一点也不响应.怎么办?
我的最新尝试是仅在解析了所有帖子之后更新表(解析器非常快,所以它没有太大的延迟).然后,它将现有帖子加载到NSDictionary中,将其ID映射到用作表数据源的数组中的索引.然后,它的每一个对象遍历柱的新解析阵列中,加入NSIndexPath对于每个到稍后传递到阵列-insertRowsAtIndexPaths:withRowAnimation:,-deleteRowsAtIndexPaths:withRowAnimation:以及-reloadRowsAtIndexPaths:withRowAnimation:酌情插入,删除,移动,或更新的细胞.对于500个帖子,这需要大约4秒才能更新,UI完全没有响应.那个时间几乎专门用于UITableView动画更新; 迭代两个帖子数组只需要很少的时间.
我然后修改它,以便更新它们没有动画,我有单独的数组插入/删除/重新加载动画仅适用于对应于当前可见行的行位置.这样做会更好,但是会删除帖子并添加新帖子.
对不起,这是如此啰嗦,但这是结果:
如何更新UITableView,推送新单元格,推送其他单元格,还有其他人从一个位置移动到另一个位置,UITableView中最多有500个单元格(一次可见6-8个),每个动画都会发生按顺序,UI仍然完全响应?
我想创建一个简单的IO对象,它表示打开到另一个程序的管道,我可以在我的应用程序运行时定期写入另一个程序的STDIN.我希望它能够防弹(因为它可以捕获所有错误)和跨平台.我能找到的最佳选择是:
opensub io_read {
local $SIG{__WARN__} = sub { }; # Silence warning.
open my $pipe, '|-', @_ or die "Cannot exec $_[0]: $!\n";
return $pipe;
}
Run Code Online (Sandbox Code Playgroud)
好处:
缺点
$SIG{PIPE}从管道程序捕获错误sub io_read {
IO::Pipe->reader(@_);
}
Run Code Online (Sandbox Code Playgroud)
好处:
缺点
$SIG{PIPE}从管道程序中捕获错误在IPC :: Run中没有用于写入文件句柄的接口,只是附加到标量.这似乎......很奇怪.
这里也没有文件句柄接口.我可以使用代码引用,它将被重复调用以假脱机到子代,但是看看源代码,它似乎实际写入临时文件,然后打开它并将其内容假脱机到管道命令STDIN.世界卫生大会?
仍然没有文件句柄接口.
我在这里错过了什么?似乎这应该是一个已经解决的问题,而且我有点惊讶它不是.IO :: Pipe最接近我想要的,但缺乏$SIG{PIPE}错误处理和缺乏对Windows的支持是令人痛苦的.JDWIM的管道模块在哪里?
我还没有看到Swift标准库的文档,我期望在这里找到像File类或带有用于打开,读取和写入文件的接口的结构.你期望File IO的所有常用内容.有没有,或者是依赖于NSFileManager及其同类?
我在 GitHub 上做了一个新项目,有两个工作流程:
我希望只有在第一个工作流程成功时才触发第二个工作流程。有没有办法做到这一点?或者我是否需要创建一个工作流文件,其中第二个工作依赖于第一个工作?
我正在创建一个iPhone应用程序,它将从Web API中提取数据,包括电子邮件地址.我想在表格单元格中显示与每个电子邮件地址关联的图像,因此我在地址簿中搜索图像,如果电子邮件地址不在书中,则返回默认值.这很好用,但我有一些顾虑:
性能:据我所知,通过电子邮件地址(或电话号码)查找地址簿记录的食谱相当缓慢.原因是必须遍历每个地址簿记录,并且对于每个具有图像的记录,迭代所有电子邮件地址以查找匹配.当然,这对于大型地址簿来说可能是耗时的.
表格单元格:所以我想我会收集所有需要查找图像的电子邮件地址并立即找到它们.这样我只对所有地址遍历一次书.但这对表格单元格不起作用,其中每个单元格对应一个电子邮件地址.我要么显示任何细胞(可能慢)之前收集的所有图像,或者每个单元中查找每个图像的加载(更慢,因为我需要通过这本书来迭代找到一个匹配的每个电子邮件地址).
异步查找:那么我想我会批量查找它们,但异步,使用NSInvocationOperation.对于在AddressBook中找到的每个图像,我会在应用程序沙箱中保存一个缩略图.然后每个单元格可以引用此文件并显示默认值(如果它不存在(因为它不在书中或尚未找到)).如果稍后在异步查找中找到图像,则下次需要显示图像时,它会突然出现.这可能适用于图像的周期性再生(例如,当地址簿中的图像已被更改时).但是对于我的应用程序的任何给定实例,图像可能实际上不会出现一段时间.
异步表单元格查找:理想情况下,我会使用像markjnet的异步表格单元格更新来更新表格单元格,并在下载后再映像.但为了实现这一点,我必须为NSInvocationOperation显示的每个单元格分离一个作业,如果沙箱中缺少缓存的图标.但是接下来我们又回到了无效地遍历每个地址簿的整个地址簿 - 如果您刚刚下载了大量新的电子邮件地址,那么它们可能会很多.
所以我的问题是:其他人如何做到这一点?我正在摆弄Tweetie2,它看起来像是异步更新显示的表格单元格.我假设它正在为它需要的每个图像发送一个单独的HTTP请求.如果是这样,我想通过电子邮件地址搜索本地地址簿效率不高,那么这可能是最好的方法吗?只是不担心与搜索地址簿相关的性能问题?
如果是这样,将沙盒中的缩略图保存为缓存的最佳方法?如果我想创建一个新工作来更新所有缩略图,并且地址簿中的任何更改都说每天一次,那么这样做的最佳方法是什么?
你们其他人如何解决这类问题?建议将不胜感激!
由于遗留原因,我们在Oracle 10数据库中有一个VARCHAR2列 - 其中字符编码设置为AL32UTF8-that包含一些非UTF-8值.值始终位于以下字符集之一:
我编写了一个Perl函数来修复数据库外的破坏值.对于此数据库列中的值,它会遍历此编码列表并尝试将值转换为UTF-8.如果转换失败,则尝试下一次编码.第一个无错误转换的是我们保留的价值.现在,我想在数据库中复制此功能,以便任何人都可以使用它.
但是,我能找到的就是CONVERT函数,它永远不会失败,但是为它无法识别的字符插入替换字符.因此,据我所知,无法知道转换何时失败.
因此,我有两个问题:
更新:
作为参考,我在PL/pgSQL中编写了这个PostgreSQL函数,它完全符合我的需要:
CREATE OR REPLACE FUNCTION encoding_utf8(
bytea
) RETURNS TEXT LANGUAGE PLPGSQL STRICT IMMUTABLE AS $$
DECLARE
encoding TEXT;
BEGIN
FOREACH encoding IN ARRAY ARRAY[
'UTF8',
'WIN1252',
'LATIN1'
] LOOP
BEGIN
RETURN convert_from($1, encoding);
EXCEPTION WHEN character_not_in_repertoire OR untranslatable_character THEN
CONTINUE;
END;
END LOOP;
END;
$$;
Run Code Online (Sandbox Code Playgroud)
我非常想知道如何在Oracle中做同等的事情.
我通过App Store安装了Xcode 4.5,它支持iOS 5.1和6.0,但不支持iOS 4.3.也无法在"首选项"的"下载"选项卡中下载.我尝试从另一台计算机上抓取它并把它放在这台计算机上,正如Dominik Porada所描述的那样,但是唉,这样做不起作用.也许我需要其他文件?如何恢复iOS 4.3 SDK?
iphone ×3
ios ×2
uitableview ×2
animation ×1
api ×1
asynchronous ×1
caching ×1
cocoa ×1
cocoa-touch ×1
dependencies ×1
docker ×1
events ×1
feed ×1
file ×1
filehandle ×1
github ×1
image ×1
io ×1
ipc ×1
objective-c ×1
oracle ×1
perl ×1
pipe ×1
publish ×1
sdk ×1
swift ×1
uiwebview ×1
unicode ×1
utf-8 ×1
xcode ×1