我有快速的线程问题.我有一个包含一些对象的数组.在委托上,类每秒都会获得新对象.之后我必须检查对象是否已经在数组中,所以我必须更新对象,否则我必须删除/添加新对象.
如果我添加一个新对象,我必须首先通过网络获取一些数据.这是handelt经过一个街区.
现在我的问题是,如何同步这项任务?
我尝试了一个dispatch_semaphore,但是这个阻止了UI,直到块完成.
我还尝试了一个简单的bool变量,它检查块当前是否执行并同时跳过compare方法.
但这两种方法都不理想.
什么是管理阵列的最佳方式,我不想在阵列中有重复的数据.
我目前尝试将rails 3.2应用程序切换到rails 4.0.但我对has_and_belongs_many模型有一个问题.
我创建了一个测试应用程序,我遇到了同样的问题.这就是我所做的:
创建了两个模型:foo_clip和foo_url
class FooClip < ActiveRecord::Base
has_and_belongs_to_many :foo_urls
attr_accessible :id, :name
end
class FooUrl < ActiveRecord::Base
has_and_belongs_to_many :foo_clips
attr_accessible :url
end
Run Code Online (Sandbox Code Playgroud)
在此之后,我更新了迁移文件:
class CreateFooClips < ActiveRecord::Migration
def change
create_table :foo_clips do |t|
t.string :name
t.timestamps
end
end
end
class CreateFooUrls < ActiveRecord::Migration
def change
create_table :foo_urls do |t|
t.string :url
t.timestamps
end
end
end
Run Code Online (Sandbox Code Playgroud)
现在我已经为has_and_belongs_to_many表创建了迁移文件
class CreateFooClipsFooUrls < ActiveRecord::Migration
def change
create_table :foo_clips_foo_urls do |t|
t.belongs_to :foo_url
t.belongs_to :foo_clip
end
end
end
Run Code Online (Sandbox Code Playgroud)
最后一步,我创建了一个用于测试的种子文件:
foourl1 = …Run Code Online (Sandbox Code Playgroud) 自从使用Swift 2.2更新到Xcode 7.3后,我无法从外部Objective-C库访问变量.
从今天起我就能够访问这些变量:
extern NSString* const DEFAULT_URL;
Run Code Online (Sandbox Code Playgroud)
这是在预编译的.a框架的Objective-C头文件中定义的.
在我的快捷代码中,我只需要打电话DEFAULT_URL.
从Swift 2.2开始,我得到以下错误信息:
Use of unresolved identifier 'DEFAULT_URL'
Run Code Online (Sandbox Code Playgroud)
我能够访问此框架的类和方法,但我无法访问extern NSStrings.
任何想法如何解决这一问题?
我UITableViewCells在.xib文件中有自己的习惯。由于Xcode 11 Beta 5(也已通过Beta 6测试),因此我UILabels忽略了“暗模式”,并且文本始终为黑色。我已将UILabel文本颜色设置为默认(标签颜色),因此它应该自动更改。有人有什么想法吗?
这是屏幕截图:第一个单元格是基本单元格,第二个单元格是.xib文件中的自定义单元格。
我有一个常规UITableViewCell的自定义颜色,但我怎么能改变边框?
目前它看起来很丑陋:

我只想要一个小小的白色边框.
我得到一个函数作为函数参数,并希望在#selector中设置它.但我收到错误消息:
Argument of '#selector' cannot refer to a property
Run Code Online (Sandbox Code Playgroud)
我有以下功能:
private func addGestureRecognizerToItem(selector: () -> ()) {
let labelGesture = UITapGestureRecognizer(target: self, action: #selector(selector))
let imageGesture = UITapGestureRecognizer(target: self, action: #selector(selector))
label.addGestureRecognizer(labelGesture)
imageView.addGestureRecognizer(imageGesture)
}
Run Code Online (Sandbox Code Playgroud)
任何想法如何处理这个?
我使用NSExpression来解决数学公式.如果输入公式正确,则Everthing工作正常,但如果输入的公式如下:
6-
Run Code Online (Sandbox Code Playgroud)
我的应用程序因以下错误消息而终止:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unable to parse the format string "6- == 1"'
Run Code Online (Sandbox Code Playgroud)
在Object-C中,可以将此代码放入@try块中.swift中有同等的东西吗?或者我该如何处理这个例外?
这是我简单的NSExpression代码:
let expression = NSExpression(format: finalFormula)
if let result = expression.expressionValueWithObject(nil, context: nil) as? NSNumber {
return result
}
Run Code Online (Sandbox Code Playgroud)
我解决方案是首先检查输入,但如果我回到零或类似的东西,我会对我好.
我有以下代码
var column = 0
column = column >= 2 ? 0 : ++column
Run Code Online (Sandbox Code Playgroud)
从2.2开始我得到折旧警告,任何想法如何解决这个问题?
我有这个解决方案:
if column >= 2 {
column = 0
} else {
column += 1
}
Run Code Online (Sandbox Code Playgroud)
但这不是很好.
我有问题,iOS应用程序访问目录中的Library/Sounds文件.
我的iOS应用程序在主应用程序包中提供不同的声音文件.我写了一些代码将选定的文件复制到Library/Sounds目录中.它foo.caf在该目录中始终具有相同的名称().
这样我就能切换到不同的推送通知声音.如果我这样做第一次一切正常.但是,如果我切换到其他应用程序并且我收到推送通知,则不再有声音.此外,默认声音不会播放.但奇怪的是,如果我重启iPhone并收到新的推送通知,我会得到新选择的声音..
iOS是否有一些缓存或其他东西,我必须先重置?或者这是一个iOS错误?
编辑:
我写了一个小的演示项目来重现这个问题.它可以在以下位置找到:
源代码:https://github.com/patricks/PushNotificationSoundSwitch/releases
Git Repo:https://github.com/patricks/PushNotificationSoundSwitch
自述文件:https://github.com/patricks/PushNotificationSoundSwitch/blob/master/README.md
我DateComponentsFormatter习惯TimeInterval在 iOS 中格式化。如果我的结果为 1:09,则应显示前导零。结果如下所示:01:09。这可能与DateComponentsFormatter.
这是我的示例代码:
let interval: TimeInterval = 4155
let formatter = DateComponentsFormatter()
formatter.unitsStyle = .positional
formatter.allowedUnits = [.hour, .minute]
formatter.zeroFormattingBehavior = .pad
formatter.collapsesLargestUnit = false
formatter.string(from: interval)
Run Code Online (Sandbox Code Playgroud) 我目前正在 Swift 中构建一个 iOS 框架项目。我还有一个自己的测试构建目标。我还在测试构建目标中添加了一个新的 TestSettings.plist 文件。我在那里存储 api 调用的用户名/密码。但是 XCTest 现在总是失败,因为它无法加载 plist 文件。
我已经检查过 plist 文件在 .xctest 文件夹/包中
我尝试使用以下代码加载 plist 文件:
if let path = NSBundle.mainBundle().pathForResource("TestSettings", ofType: "plist") {
settingsDictionary = NSDictionary(contentsOfFile: path)
} else {
XCTFail("API: getAuthToken no TestSettings.plist file found")
}
Run Code Online (Sandbox Code Playgroud)
任何想法我做错了什么,或者有没有其他方法可以不将用户名/密码放入测试用例中?
我在ruby控制台中得到了以下输出.
Integer('009') # => ArgumentError: invalid value for Integer(): "009"
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试将相同的字符串转换为Float,它可以工作.
Float('009') # => 9.0
Run Code Online (Sandbox Code Playgroud)
为什么Float转换这个而Integer不是?
我的routes.rb文件看起来像:
resources :contents, only: [:show]
get 'contents/by_hardware', to: 'contents#show_by_hardware'
Run Code Online (Sandbox Code Playgroud)
通过此设置,我无法访问contents/by_hardware路线.
但是如果我routes.rb以不同的顺序设置我的文件,那么everthing就可以了.
get 'contents/by_hardware', to: 'contents#show_by_hardware'
resources :contents, only: [:show]
Run Code Online (Sandbox Code Playgroud)
routes.rb文件中的顺序是否重要?
swift ×8
ios ×7
ruby ×3
iphone ×2
xcode ×2
arrays ×1
audio ×1
date ×1
ios-darkmode ×1
ios13 ×1
literals ×1
objective-c ×1
postgresql ×1
read-write ×1
swift2.2 ×1
uitableview ×1
xctest ×1