小编pat*_*ckS的帖子

在swift中创建线程安全数组

我有快速的线程问题.我有一个包含一些对象的数组.在委托上,类每秒都会获得新对象.之后我必须检查对象是否已经在数组中,所以我必须更新对象,否则我必须删除/添加新对象.

如果我添加一个新对象,我必须首先通过网络获取一些数据.这是handelt经过一个街区.

现在我的问题是,如何同步这项任务?

我尝试了一个dispatch_semaphore,但是这个阻止了UI,直到块完成.

我还尝试了一个简单的bool变量,它检查块当前是否执行并同时跳过compare方法.

但这两种方法都不理想.

什么是管理阵列的最佳方式,我不想在阵列中有重复的数据.

arrays multithreading read-write ios swift

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

Rails 4迁移:has_and_belongs_to_many表名

我目前尝试将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)

ruby postgresql ruby-on-rails ruby-on-rails-4

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

自Swift 2.2以来无法访问extern NSString

自从使用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.

任何想法如何解决这一问题?

xcode swift

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

.xib文件中的UITableViewCell中的UILabel忽略暗模式

UITableViewCells.xib文件中有自己的习惯。由于Xcode 11 Beta 5(也已通过Beta 6测试),因此我UILabels忽略了“暗模式”,并且文本始终为黑色。我已将UILabel文本颜色设置为默认(标签颜色),因此它应该自动更改。有人有什么想法吗?

这是屏幕截图:第一个单元格是基本单元格,第二个单元格是.xib文件中的自定义单元格。

在此处输入图片说明

xcode ios ios13 ios-darkmode

13
推荐指数
1
解决办法
1003
查看次数

UITableViewCell设置边框

我有一个常规UITableViewCell的自定义颜色,但我怎么能改变边框?

目前它看起来很丑陋:

截图

我只想要一个小小的白色边框.

iphone objective-c uitableview ios

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

将函数传递给#selector

我得到一个函数作为函数参数,并希望在#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)

任何想法如何处理这个?

swift

7
推荐指数
1
解决办法
2240
查看次数

使用Swift处理来自NSExpression的NSInvalidArgumentException异常

我使用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)

我解决方案是首先检查输入,但如果我回到零或类似的东西,我会对我好.

ios swift

6
推荐指数
0
解决办法
1544
查看次数

如何在?:ternary运算符中重写Swift ++运算符

我有以下代码

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)

但这不是很好.

swift swift2.2

6
推荐指数
1
解决办法
844
查看次数

更改推送通知声音文件,仅在iOS重启后才能使用

我有问题,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

iphone audio push-notification ios swift

5
推荐指数
0
解决办法
586
查看次数

DateComponentsFormatter 显示前导零

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)

date nsdateformatter ios swift

5
推荐指数
2
解决办法
3985
查看次数

Swift XCTest 失败,因为找不到 plist 文件

我目前正在 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)

任何想法我做错了什么,或者有没有其他方法可以不将用户名/密码放入测试用例中?

ios xctest swift

3
推荐指数
1
解决办法
1715
查看次数

为什么`Integer('009')不起作用,但`Float('009')`呢?

我在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不是?

ruby literals

1
推荐指数
2
解决办法
129
查看次数

routes.rb中路由的顺序是否重要?

我的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文件中的顺序是否重要?

ruby ruby-on-rails ruby-on-rails-4

0
推荐指数
1
解决办法
80
查看次数