我想检测的iOS 6特定外观的方法,通过运行respondsToSelector
在[UIBarButtonItem appearance]
.但是,NO
无论我指定哪个选择器,它总是为我返回:
// Should show NOPE in iOS 5, YEP in iOS 6. Shows NOPE always
NSLog(@"%@", [[UIBarButtonItem appearance] respondsToSelector:@selector(setBackgroundImage:forState:style:barMetrics:)] ? @"YEP" : @"NOPE");
// Should show YEP in both iOS 5 and iOS 6. Shows NOPE always
NSLog(@"%@", [[UIBarButtonItem appearance] respondsToSelector:@selector(setBackgroundImage:forState:barMetrics:)] ? @"YEP" : @"NOPE");
Run Code Online (Sandbox Code Playgroud)
实际上使用这些方法在他们各自的iOS版本上工作正常,但我似乎无法检测到哪一个可供我使用.那我该怎么做呢?
我在appearanceWhenContainedIn
我想要在iOS 6应用程序中自定义的某些UI元素上使用该方法.我发现的问题是,如果我尝试提供多个容器类,则不会应用任何自定义,如下所示:
// Works neither for toolbar nor navbar items
[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], [UIToolbar class], nil]
// Works fine (but only for navbar items, obviously)
[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil]
Run Code Online (Sandbox Code Playgroud)
官方文档说这个方法的参数可以是多个类的nil终止列表,但在我的情况下,它永远不会按照它应该的方式工作.我在这里错过了什么吗?
我无法理解:这真的是一个错误,还是我错过了一些东西?
我已经box-sizing: border-box
在HTML文档中设置了所有div(当然包含所有-moz
和-webkit
前缀).所以它意味着height
div总是包含它padding
.期望该min-height
物业采取类似行动是合理的.但显然,在Firefox中却没有.
我的意思是,当我有一个没有height
设置(即height: auto
)但没有min-height
(例如,220px)和padding
(比如说10px)的div时,它会导致div的整体高度为240px而不是Firefox中的220!不过,它在Chrome和Opera中都保持不变.
这不应该是固定的,还是某种我没有得到的功能?
我认为我不太了解正确使用Backbone路由器背后的想法.这是我得到的:
我有一些数据,我在页面加载时从服务器获取数据,然后将其打包到模型和集合中.这些模型和集合的数量是无限的.我想使用路由器能够从一开始就直接呈现某个集合的视图.
问题是:Backbone路由器提前启动,因为我要求它访问某个视图并触发其render
动作,所以它不能这样做,因为那些视图尚未创建.这意味着我实际上必须在获取完成后启动我的路由.
我不知道这是否是一种正确的方法,但我想出的唯一想法是:
Backbone.history.start();
位包装到单独的顶级可访问函数中(即稍后准备手动调用).success
我的集合的回调fetch()
_.defer()
和_.once()
.这有效,但肯定看起来很奇怪:
路由器:
window.startRoutes = _.once(function() {
var AccountPage = Backbone.Router.extend({
routes: {
'set/:id': 'renderSet',
},
renderSet: function(setId) {
/** … **/
// Call the rendering method on the respective CardView
CardsViews[setId].render();
}
});
var AccountPageRouter = new AccountPage;
Backbone.history.start();
});
Run Code Online (Sandbox Code Playgroud)
采集:
window.CardsCollection = Backbone.Collection.extend({
model: Card,
initialize: function(params) {
/** … **/
// Get the initial data
this.fetch({success: function() {
_.defer(startRoutes);
}}); …
Run Code Online (Sandbox Code Playgroud) 我在我的iOS应用程序中使用Parse对象存储,我为我的Parse对象创建了一个自定义子类,看起来有点像这样:
class MyThing: PFObject, PFSubclassing {
// ...PFSubclassing protocol...
@NSManaged var name: String
@NSManaged var somethingElse: String
@NSManaged var relatedThings: PFRelation
}
Run Code Online (Sandbox Code Playgroud)
该relatedThings
属性有效:我可以从商店中获取相关对象.但是,我不断从Parse得到这个警告:
[Warning]: PFRelation properties are always readonly,
but MyApp.MyThing.relatedThings was declared otherwise.
Run Code Online (Sandbox Code Playgroud)
在Objective-C中,我可以轻松地将该属性标记为只读,但我不确定如何在Swift中将其作为静音警告.
使用let
而不是与var
不允许结合使用@NSManaged
.
添加private(set)
也没有影响:
@NSManaged private(set) var relatedThings: PFRelation
Run Code Online (Sandbox Code Playgroud)
那么Parse如何期望我宣布关系属性呢?
我在Ruby on Rails应用程序中有以下代码行,它检查给定字符串是否包含韩语字符:
isKorean = !/\p{Hangul}/.match(word).nil?
Run Code Online (Sandbox Code Playgroud)
它在控制台中运行良好,但会为实际应用程序引发语法错误:
invalid character property name {Hangul}: /\p{Hangul}/
Run Code Online (Sandbox Code Playgroud)
我错过了什么,我怎样才能让它发挥作用?
我随机地在我的JS应用程序中发生了一个非常奇怪的错误.基本上,脚本无法准确比较两个字符串.更具体地说,有时看不到两个相同的字符串相同:('blah' == 'blah')
return false
.
有趣的是,在另一次尝试中,相同的两个字符串可以被认为是相同的(语句返回true
).我从未设法弄清楚这种模式.我也试过用===
而不是==
; 这没有用.
除了录制截屏视频之外,我想不出更好的方式来演示和证明这个荒谬的错误.所以这是:http://www.screenr.com/klOs.我继续为该视频中的每个测验给出正确的答案,但是接近结束时,我对"日本"和"台湾"的答案将被视为"错误"; 控制台还将显示给定的答案字符串,正确的答案字符串以及比较结果(false
?!!).
那么这可能是造成这种奇怪行为的原因,我该如何解决这个问题呢?
您可以在截屏视频中看到带有比较语句的代码.'params.givenAnswer'直接来自按钮文字标签:
//*** Options for answering the card quiz
quizOptions = new Ext.Panel({
id: 'quizOptions',
[…………]
listeners: {
el: {
scope: this,
tap: this.checkAnswer
}
}
});
checkAnswer: function(container, element) {
// Get the text value of the button clicked
var answer = Ext.fly(element).dom.innerText;
Ext.dispatch({
controller: 'Practice',
action: 'checkAnswer',
givenAnswer: answer
});
},
Run Code Online (Sandbox Code Playgroud)
更新感谢@JAAulde和@Mike!我试图在日志记录中包含引号和var类型,我得到了这个结果:
现在很明显为什么字符串比较失败了:第一个字符串中似乎有一个额外的换行符.它仍然非常奇怪,因为它在之前的日志记录中并没有显示为空白的新行,最重要的是,它随机出现在那里(注意这次"台湾"如何被接受而没有任何问题).
我为答案字符串添加了一个简单的换行符删除规则,现在一切似乎都运行正常.非常感谢大家!
我使用JavaScript Date对象将毫秒转换为可读minutes:seconds
格式的字符串.我需要为自定义视频播放器创建一个计时器,我的JS接口接收视频持续时间信息作为毫秒值.
在我决定支持视频超过59分钟的可能性之前,这是一项相当简单的任务.然后我遇到了这个问题:当我向新的Date对象的构造函数提交毫秒值,然后调用时getHours()
,即使毫秒数代表不到一小时的时间段,它也会返回一些东西.看到这个行动的最简单方法是喂它,比方说0.
我希望它返回0,但它总是返回12(Opera中的13,这使得它更奇怪).这是正常行为还是错误?无论哪种方式,我如何可靠地检测我的毫秒值是否仅限于几分钟或几秒还是包括几小时?
谢谢.
UPD:
我在OSX上的Chrome 15和Firefox 7中进行了测试:结果与上面的截图相同.我无法弄清楚如何使用Opera Dragonfly控制台,但从我所看到的同样的事情发生在Opera中,只需要13的值getHours()
.
我是Sencha Touch的新手,对数据处理模式仍然不太自信.我想要设置我的应用程序的方式是这样的:
通过AJAX从远程服务器检索用户的数据.
将其保存在本地存储中.任何修改(编辑,添加,删除项目)都会更新本地数据.
在某个时间点(当用户点击"同步"时,当用户退出时,或类似的东西),本地存储的存储数据再次通过请求AJAX与服务器同步.
那么,为了实现这种模式,我的应用程序的基本结构是什么?而且,虽然我们在这里,有没有办法在Sencha Touch中为指定的商店使用本地数据库(而不是本地键值存储)?
假设我们有一个能够自我突变的结构,它必须作为后台操作的一部分发生:
struct Thing {
var something = 0
mutating func operation(block: () -> Void) {
// Start some background operation
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0)) {
// Mutate self upon background task completion
self.something += 1
block()
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,当我在上下文中使用这样的结构时:
var myThing = Thing()
myThing.operation {
println(myThing.something)
}
Run Code Online (Sandbox Code Playgroud)
该println
给我0
,就好像myThing
从来没有发生突变.self.something
从内部印刷dispatch_async
明显产量1
.
我如何解决这个问题,最好不必self
在operation
竞争块中传递更新的结构并覆盖主要上下文中的原始变量?
// Ew
var myThing = Thing()
myThing.operation {
(mutatedThing) in
myThing = mutatedThing
println(myThing.something)
}
Run Code Online (Sandbox Code Playgroud) ios6 ×2
javascript ×2
objective-c ×2
sencha-touch ×2
swift ×2
uiappearance ×2
xcode ×2
backbone.js ×1
cjk ×1
core-data ×1
css ×1
date ×1
firefox ×1
formatting ×1
html ×1
ios ×1
ios5 ×1
logic ×1
mutators ×1
pfrelation ×1
regex ×1
routes ×1
ruby ×1
string ×1
struct ×1