小编the*_*ory的帖子

如何在UIWebView中处理应用程序URL?

我最近发现我的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)

我有两个问题:

  1. 这样理智吗?我专门检查错误域和错误代码,并从userInfo中获取URL字符串.这些东西可能会留下来吗?
  2. 这适用于上面链接的应用商店链接,但当我切换回我的应用时,似乎有一个后续失败的请求因"帧加载中断"而失败.我怎么能摆脱那个?当我让OS处理请求时-webView:shouldStartLoadWithRequest:navigationType:,它不会发生,所以它有点烦人.

如何处理这些请求?

iphone cocoa uiwebview ios uiwebviewdelegate

61
推荐指数
2
解决办法
7万
查看次数

我如何获得去年我贡献的所有GitHub项目的列表?

我意识到我可以点击https://api.github.com/users/:user_id/repos获取我拥有或分叉的所有回购的清单.但我想要做的是弄清楚我去年所做的所有项目(提交,拉取请求,问题等).该事件API让我得到最后的300个事件,但我已经贡献了很多在过去十二个月不止于此.这可能吗?

api events github

33
推荐指数
1
解决办法
5305
查看次数

如何在最后一个单元格上启动UITableView?

在Apple的消息应用程序中,当您单击通讯员的名称并切换到对话的表格视图(每个消息都有气球)时,表格会一直滚动到最后.没有动画或任何东西,它就在那里.

同样,在Tweetie 2中,当您加载推文视图时,它会显示在您上次查看它的位置.没有动画到达那里,它就在那里,好像上面没有任何单元格被加载.

这些应用程序如何做到这一点?他们scrollToRowAtIndexPath:atScrollPosition:animated:在桌面控制器的某个地方打电话吗?如果是这样,他们怎么知道要传递给atScrollPosition:谁?它叫什么方法?

iphone objective-c uitableview

26
推荐指数
5
解决办法
4万
查看次数

如何使用动画有效地更新UITableView?

我的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仍然完全响应?

animation cocoa-touch feed uitableview

19
推荐指数
1
解决办法
1万
查看次数

什么是首选的跨平台IPC Perl模块?

我想创建一个简单的IO对象,它表示打开到另一个程序的管道,我可以在我的应用程序运行时定期写入另一个程序的STDIN.我希望它能够防弹(因为它可以捕获所有错误)和跨平台.我能找到的最佳选择是:

open

sub 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}从管道程序捕获错误
  • 是否有其他错误?

IO ::管

sub io_read {
    IO::Pipe->reader(@_);
}
Run Code Online (Sandbox Code Playgroud)

好处:

  • 简单
  • 返回OO接口的IO :: Handle对象
  • 由Perl核心支持.

缺点

  • 仍然没有$SIG{PIPE}从管道程序中捕获错误
  • Win32不支持(或者,至少,它的测试被跳过)

IPC ::运行

在IPC :: Run中没有用于写入文件句柄的接口,只是附加到标量.这似乎......很奇怪.

IPC :: RUN3

这里也没有文件句柄接口.我可以使用代码引用,它将被重复调用以假脱机到子代,但是看看源代码,它似乎实际写入临时文件,然后打开它并将内容假脱机到管道命令STDIN.世界卫生大会?

IPC :: Cmd的

仍然没有文件句柄接口.


我在这里错过了什么?似乎这应该是一个已经解决的问题,而且我有点惊讶它不是.IO :: Pipe最接近我想要的,但缺乏$SIG{PIPE}错误处理和缺乏对Windows的支持是令人痛苦的.JDWIM的管道模块在哪里?

perl ipc pipe filehandle

16
推荐指数
1
解决办法
2084
查看次数

如何在Swift中打开文件?

我还没有看到Swift标准库的文档,我期望在这里找到像File类或带有用于打开,读取和写入文件的接口的结构.你期望File IO的所有常用内容.有没有,或者是依赖于NSFileManager及其同类?

io file swift

15
推荐指数
4
解决办法
3万
查看次数

如何使 GitHub 工作流依赖于另一个工作流的成功?

我在 GitHub 上做了一个新项目,有两个工作流程:

我希望只有在第一个工作流程成功时才触发第二个工作流程。有没有办法做到这一点?或者我是否需要创建一个工作流文件,其中第二个工作依赖于第一个工作?

dependencies publish docker github-actions

12
推荐指数
0
解决办法
4163
查看次数

在iPhone上进行异步图像缓存的最佳方法是什么?

我正在创建一个iPhone应用程序,它将从Web API中提取数据,包括电子邮件地址.我想在表格单元格中显示与每个电子邮件地址关联的图像,因此我在地址簿中搜索图像,如果电子邮件地址不在书中,则返回默认值.这很好用,但我有一些顾虑:

  • 性能:据我所知,通过电子邮件地址(或电话号码)查找地址簿记录的食谱相当缓慢.原因是必须遍历每个地址簿记录,并且对于每个具有图像的记录,迭代所有电子邮件地址以查找匹配.当然,这对于大型地址簿来说可能是耗时的.

  • 表格单元格:所以我想我会收集所有需要查找图像的电子邮件地址并立即找到它们.这样我只对所有地址遍历一次书.但这对表格单元格不起作用,其中每个单元格对应一个电子邮件地址.我要么显示任何细胞(可能慢)之前收集的所有图像,或者每个单元中查找每个图像的加载(更慢,因为我需要通过这本书来迭代找到一个匹配的每个电子邮件地址).

  • 异步查找:那么我想我会批量查找它们,但异步,使用NSInvocationOperation.对于在AddressBook中找到的每个图像,我会在应用程序沙箱中保存一个缩略图.然后每个单元格可以引用此文件并显示默认值(如果它不存在(因为它不在书中或尚未找到)).如果稍后在异步查找中找到图像,则下次需要显示图像时,它会突然出现.这可能适用于图像的周期性再生(例如,当地址簿中的图像已被更改时).但是对于我的应用程序的任何给定实例,图像可能实际上不会出现一段时间.

  • 异步表单元格查找:理想情况下,我会使用像markjnet的异步表格单元格更新来更新表格单元格,并在下载后再映像.但为了实现这一点,我必须为NSInvocationOperation显示的每个单元格分离一个作业,如果沙箱中缺少缓存的图标.但是接下来我们又回到了无效地遍历每个地址簿的整个地址簿 - 如果您刚刚下载了大量新的电子邮件地址,那么它们可能会很多.

所以我的问题是:其他人如何做到这一点?我正在摆弄Tweetie2,它看起来像是异步更新显示的表格单元格.我假设它正在为它需要的每个图像发送一个单独的HTTP请求.如果是这样,我想通过电子邮件地址搜索本地地址簿效率不高,那么这可能是最好的方法吗?只是不担心与搜索地址簿相关的性能问题?

如果是这样,将沙盒中的缩略图保存为缓存的最佳方法?如果我想创建一个新工作来更新所有缩略图,并且地址簿中的任何更改都说每天一次,那么这样做的最佳方法是什么?

你们其他人如何解决这类问题?建议将不胜感激!

iphone caching asynchronous image abaddressbook

10
推荐指数
1
解决办法
4197
查看次数

如何从可能的编码列表中将Oracle VARCHAR2值转换为UTF-8?

由于遗留原因,我们在Oracle 10数据库中有一个VARCHAR2列 - 其中字符编码设置为AL32UTF8-that包含一些非UTF-8值.值始终位于以下字符集之一:

  • US-ASCII
  • UTF-8
  • CP1252
  • 拉丁-1

我编写了一个Perl函数来修复数据库外的破坏值.对于此数据库列中的值,它会遍历此编码列表并尝试将值转换为UTF-8.如果转换失败,则尝试下一次编码.第一个无错误转换的是我们保留的价值.现在,我想在数据库中复制此功能,以便任何人都可以使用它.

但是,我能找到的就是CONVERT函数,它永远不会失败,但是为它无法识别的字符插入替换字符.因此,据我所知,无法知道转换何时失败.

因此,我有两个问题:

  1. 是否有一些现有的接口试图将一个字符串转换为一个编码列表,返回第一个成功?
  2. 如果没有,是否有其他接口指示失败,如果它无法将字符串转换为编码?如果是这样,那么我可以编写上一个函数.

更新:

作为参考,我在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中做同等的事情.

oracle unicode utf-8 character-encoding

9
推荐指数
1
解决办法
8万
查看次数

如何在Xcode 4.5上安装iOS 4.3 Simulator?

我通过App Store安装了Xcode 4.5,它支持iOS 5.1和6.0,但不支持iOS 4.3.也无法在"首选项"的"下载"选项卡中下载.我尝试从另一台计算机上抓取它并把它放在这台计算机上,正如Dominik Porada描述的那样,但是唉,这样做不起作用.也许我需要其他文件?如何恢复iOS 4.3 SDK?

sdk xcode ios ios-simulator

8
推荐指数
1
解决办法
1万
查看次数