我的印象是,如果正常动作是破坏性动作,而另一个是UIAlertController中的取消动作,则破坏性动作应位于左侧,取消应位于右侧.
如果正常动作不具有破坏性,则正常动作应该在右侧,取消应该在左侧.
那就是说,我有以下几点:
var confirmLeaveAlert = UIAlertController(title: "Leave", message: "Are you sure you want to leave?", preferredStyle: .Alert)
let leaveAction = UIAlertAction(title: "Leave", style: .Destructive, handler: {
(alert: UIAlertAction!) in
//Handle leave
}
)
let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel, handler: nil)
confirmLeaveAlert.addAction(leaveAction)
confirmLeaveAlert.addAction(cancelAction)
self.presentViewController(confirmLeaveAlert, animated: true, completion: nil)
Run Code Online (Sandbox Code Playgroud)
我的印象是,如果我添加第leaveAction一个,那么它cancelAction就是leaveAction左边的按钮.此情况并非如此.我尝试以相反的顺序添加按钮,这也导致按钮以相同的顺序添加.
我错了吗?有没有办法实现这个目标?
考虑到ISO8601在JSON中的使用频率,我还没有找到一个非常简单的方法,我感到非常惊讶.
基本上,我正在使用一个看起来像这样的字符串:2014-10-23T00:35:14.800Z并将其转换为类似的字符串50 minutes ago.
首先,我要改变2014-10-23T00:35:14.800Z到2014-10-23'T'00:35:14.800Z的话,我需要将其转换成毫秒的话,那很容易.
我目前的代码:
private void setTimestamp(String timeCreated) {
int indexOfT = timeCreated.indexOf('T');
String properFormat = new StringBuilder(timeCreated).insert(indexOfT + 1, "'")
.insert(indexOfT, "'")
.toString();
timeStamp = (String) DateUtils.getRelativeTimeSpanString(Long.parseLong(properFormat),
System.currentTimeMillis(),
DateUtils.SECONDS_IN_MILLIS);
}
Run Code Online (Sandbox Code Playgroud)
罪魁祸首是Long.parseLong(properFormat).我需要转换properFormat成毫秒.
我需要在某个地方修复一些CSS,因为我的文字没有环绕,而是如果它是一个非常长的单词而无限期地继续下去.
就像在大多数情况下一样,我word-wrap: break-word;在我的CSS文件中尝试过它并没有用.
然后,令我惊讶的是,根据Google Chrome开发者工具的建议,我尝试word-break: break-word;了解决了我的问题.我对此感到震惊,所以我一直在谷歌上搜索这两者之间的区别,但我没有看到这个问题.
此外,我不认为W3没有提及它的word-break: break-word;记录行为.我在Safari和Chrome上测试了它,它在两者上都很完美,但是我很犹豫,因为我没有在任何地方提到它.word-break: break-word;
我以前在UIViewController中有一个UITableView.我会在UITableView上放置一个UIRefreshControl,在最后一点向下滑动刷新,UITableView会快速跳转.
所有答案都表达相同:未记录/意外行为(能够使用UITefreshControl与UITableView)产生这样的结果.为了缓解这个问题,我使用了一个ContainerView在UIViewController中嵌入了一个UITableViewController.
我几乎已经解决了这个问题,但是......如果我慢慢向下滑动,问题仍然存在.
有什么方法可以缓解这个问题,还是我被迫忍受它?
请注意,我向前滑动的前几次看起来非常好,因为我做得足够快,但是在视频结束时我真的放慢速度,你会注意到跳跃问题.
所以,我刚学会了,而不是写下这样的东西:
[1,2,3,4,5].inject {|x,y| x + y} => 15
Run Code Online (Sandbox Code Playgroud)
我可以写
[1,2,3,4,5].inject(:+) => 15
Run Code Online (Sandbox Code Playgroud)
我也学会了而不是写作
[1,2,3,4,5].select {|x| x.even?} => [2,4]
Run Code Online (Sandbox Code Playgroud)
我可以写
[1,2,3,4,5].select(&:even?) => [2,4]
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么一个(选择)使用&而另一个(注入)不使用.我确信这:是因为even?并且+在符号处理,但是我想要澄清为什么&在一个:中使用以及为什么使用它.
另外,我知道我可以做的不只是inject和select.
非常感谢!
我阅读了文档,我不太明白它们是做什么的.考虑到Android做出了令人费解的决定,我们现在需要使用Android Beam将数据从一个手机发送到另一个手机,并且没有办法同时从两者发送数据到两者,我看不到用途.
我不能只拨打setNdefPushMessage一部电话,并onNewIntent在另一部电话中进行回叫,如果NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())是真的话会做一些事吗?
什么是点enableForegroundDispatch和disableForegroundDispatch?
每当用户创建新注释或用户刷新UITableView时,我都会尝试滚动到我的UITableView(commentsFeed)的底部.
我使用的代码是:
func scrollToBottomOfComments() {
var lastRowNumber = commentsFeed.numberOfRowsInSection(0) - 1
var indexPath = NSIndexPath(forRow: lastRowNumber, inSection: 0)
commentsFeed.scrollToRowAtIndexPath(indexPath, atScrollPosition: .Bottom, animated: true)
}
Run Code Online (Sandbox Code Playgroud)
问题在于viewDidLoad:
commentsFeed.rowHeight = UITableViewAutomaticDimension
commentsFeed.estimatedRowHeight = 150
Run Code Online (Sandbox Code Playgroud)
这基本上表明评论可以具有动态高度,因为用户可以发布非常长的评论或非常简短的评论.
当我使用estimatedRowHeight时,我scrollToBottom没有正确地滚动到底部,因为它基本上假设我的桌子高度是commentsFeed.count * commentsFeed.estimatedRowHeight
但这不正确.
当我删除estimatedRowHeight虽然,它似乎也没有工作,我认为原因是因为它没有正确计算行高,因为行每个都有动态高度.
我该如何缓解这种情况?
编辑:应该说滚动不会在正确的位置结束,但是当我用手指在任何地方滚动时,数据会跳到应该通过滚动的位置
当我进行慢速连接并发出POST请求时,Volley会多次重试我的请求,之后所有操作都会终止我的命令errorListener.有时,这些重试实际上成功发布了数据.
用户将假设请求失败,但事实上,如果他们刷新数据,他们会看到数据被POST两次到服务器(或者在一堆中有多次成功重试).
我想给Volley一个非常愚蠢的重试政策:
我希望它尝试15秒的请求,如果请求在15秒内没有到达服务器并返回响应以触发errorListener.我不想让它重试.
唯一值得关注的是,如果Volley尝试,请求会在20~25秒内到达服务器,但到那时它会触发errorListener并且数据仍然被POST.
HTTP是否遵循时间限制,之后100%的数据将不会被发布,因为请求花费的时间太长了?也许40秒?如果是这样,那么我可以让请求持续40秒.
在所有:
没有重试并确保100%,如果第一次尝试发布数据,successListener并且如果没有发布(请求因服务器耗时过长或错误响应而死亡)errorListener.
我正在考虑使用defaultRetryPolicy做一些事情... DefaultRetryPolicy(15000, 0, 1)虽然我认为最后一个参数并不重要,因为没有重试的退避点是什么.
我怎样才能实现我要求的两段回复?
在调试模式下运行应用程序时,可以println()直接从xCode 查看日志及其调用.
我想在生产环境中测试一些内容,因此希望查看我使用AdHoc配置文件签名的应用程序的日志.有没有办法实现这个目标?怎么样?
我创建了一个使用 SendGrid 的 Inbound Parse Webhook 的应用程序。每当有人通过电子邮件发送“whatever@mydomain.com”时,电子邮件就会转到 SendGrid,然后 SendGrid 会使用包含电子邮件内容的 POST 访问我们的服务器。然后我们可以将该电子邮件数据反馈到我们的主应用程序中。
我有这一切。但是现在我不知道我应该如何验证 SendGrid 发布到我们服务器的消息。有谁知道这样做的最佳行动方案?验证我们的入站电子邮件实际上来自我们主应用程序的授权用户?
显然我们可以检查标题中的“发件人”地址,但我已经读到这些可以完全欺骗。显然,来自 SendGrid 的传入邮件的两个属性“dkim”和“spf”与授权有关。但是我在文档中或其他任何地方都找不到任何内容,这告诉我应该如何使用这些“dkim”和“spf”字段来验证消息的真实性。
如果有人有任何帮助,一般的、具体的或其他方面的……将不胜感激。提前致谢。