小编wm.*_*1us的帖子

控制台中有关权限被拒绝的警告(Firebase)

这是我的代码:

var handler:FIRDatabaseHandle!
override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    self.handler = self.ref.observe(.value, with: {[weak self] (snapshot) in
        var _tasks = Array<Task>()
        for item in snapshot.children {
            let task = Task(snapshot: item as! FIRDataSnapshot)
            _tasks.append(task)
        }

        self?.tasks = _tasks
        self?.tableView.reloadData()
    })
}

override func viewDidDisappear(_ animated: Bool) {
    super.viewDidDisappear(animated)
    self.ref.removeAllObservers()
}
Run Code Online (Sandbox Code Playgroud)

所以当我离开这个控制器(实际上我退出)时,我会在控制台中看到下一个警告:

[Firebase /数据库] [I-RDB04822]/users/ovLWTmGIPFaF6DaLzrPBBr13 /任务的监听器失败:permission_denied

firebase swift firebase-realtime-database

5
推荐指数
3
解决办法
7799
查看次数

如何在CAShapeLayer动画中使用Swift 4 KeyPath

如果我编写Swift 3代码,它将看起来像这样:

let animation = CABasicAnimation(keyPath: #keyPath(CAShapeLayer.path))
Run Code Online (Sandbox Code Playgroud)

但是我尝试对keyPath使用Swift 4新语法,并且得到了:

let keyPath = \CAShapeLayer.path
let animation = CABasicAnimation(keyPath: keyPath) // error line
Run Code Online (Sandbox Code Playgroud)

>错误:无法将类型“ ReferenceWritableKeyPath”的值转换为预期的参数类型“字符串?”

在这种情况下,如何使用Swift 4使用密钥路径?

ios swift swift4

5
推荐指数
1
解决办法
1786
查看次数

哪种格式文件适用于3D模型SceneKit/ARKit更好用

我读了几个教程,如何在SceneKit/ARKit应用程序中放置3d对象,所有这些教程都使用.scn格式文件作为对象.

但是我发现如果我使用原始.dae格式并且不将其转换为.scn格式则没有任何问题.

我真的看不到.dae和.scn格式之间的任何区别.

实际上结果在我看来是一样的,但你能解释一下它们之间的差异以及在什么情况下我应该使用什么?

谢谢!

augmented-reality ios scenekit swift

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

按对象数组过滤searchController

我已经创建了一个searchController,因此我试图使其根据UISearchController中的文本过滤内容。我创建了一个自定义对象,如下所示。我试过使用NSPredicate,但一直得到:

cannot convert value of type NSPredicate to expected type @noescape (organization) throws...

class Organization: Object {
    var id: Int = 0
    var name: String = ""
    var shortName: String = ""
    var image: NSData = NSData()
    var pinImage: NSData = NSData()
    let locations = List<Location>()

}
Run Code Online (Sandbox Code Playgroud)

然后,我sortedLocations在ViewController中调用了一个数组,其中包含许多Organization对象。

到目前为止,我已经尝试过:

func updateSearchResultsForSearchController(searchController: UISearchController)
{
    filteredTableData.removeAll(keepCapacity: false)

    let searchPredicate = NSPredicate(format: "SELF.name CONTAINS[c] %@", searchController.searchBar.text!)

    let array = sortedLocations.filter(searchPredicate)
    filteredTableData = array as! [Organization]



    self.tableView.reloadData()
}
Run Code Online (Sandbox Code Playgroud)

ios swift uisearchcontroller

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

尝试以特定尺寸显示弹出控制器

找到了几个如何使用弹出框的视频,并试图用故事板制作同样的视频,所以我明白了:

在此处输入图片说明

但是,随着应用程序的运行,当我按下按钮时,这个橙色的小控制器会占据所有绿色屏幕,而不是像我预期的那样带有箭头的小弹出框。

popover ios swift

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

创建初始值为0的信号量会导致执行问题

我正在学习GCD并且对信号量有疑问.这是我的代码:

class ViewController: UIViewController {

    var semaphore: dispatch_semaphore_t! = nil

  override func viewDidLoad() {
    super.viewDidLoad()

    semaphore = dispatch_semaphore_create(0)


    dispatch_async(dispatch_get_global_queue(QOS_CLASS_DEFAULT, 0)) {
      print("Entering")

      self.semaphoreTask()
      print(self.semaphore.debugDescription)
    }

    semaphoreTask()
     print(semaphore.debugDescription)
  }


  func semaphoreTask() {
    dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER)
    for i in 0...1000 {
      print(i)
      if i == 1000 {
        print("i is equal to 10000!")
      }
    }
    dispatch_semaphore_signal(self.semaphore)
  }
Run Code Online (Sandbox Code Playgroud)

如果我运行此代码,那么semaphoreTask中没有任何内容打印在控制台中,但如果我改变了

semaphore = dispatch_semaphore_create(0)
Run Code Online (Sandbox Code Playgroud)

semaphore = dispatch_semaphore_create(1)
Run Code Online (Sandbox Code Playgroud)

一切都开始运作良好.

问题是我为什么要写dispatch_semaphore_create(1)而不是0?

谢谢!

semaphore grand-central-dispatch swift

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

DispatchQueue 障碍问题

试图制作线程安全数组,但它的工作原理与我预期的不一样

import Foundation
import PlaygroundSupport

PlaygroundPage.current.needsIndefiniteExecution = true

public class SafeArray<Element> {
    private var array = [Element]()
    private let queue = DispatchQueue(label: "queueBarrier", attributes: .concurrent)

    public func append(element: Element) {
        queue.async(flags: .barrier) {
            self.array.append(element)
        }
    }

    public var elements: [Element] {
        var result = [Element]()
        queue.sync {
            result = self.array
        }
        return result
    }

    public var last: Element? {
        var result: Element?
        queue.sync {
            result = self.array.last
        }
        return result
    }
}




var safeArray = SafeArray<Int>()
var array = Array<Int>() …
Run Code Online (Sandbox Code Playgroud)

grand-central-dispatch ios swift

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

为什么在Xcode 10中默认不提供并行测试?

我想知道Xcode 10是否具有并行测试这么好的功能,为什么它默认关闭?如果有任何情况我最好使用此功能关闭我的测试?

testing xcode unit-testing swift

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

命令行工具Xcode中的控制台中没有打印出任何内容

当我运行以下代码时,命令行工具Xcode中的控制台中没有打印出任何内容:

import Foundation

class A {
  var someValue = 0

  let concurrentQueue = dispatch_queue_create("queue_for_property", DISPATCH_QUEUE_CONCURRENT)

  func increaseValueBy1000() {
    dispatch_barrier_async(concurrentQueue) {
      for _ in 0 ..< 1000 {
        let v = self.someValue + 1
        print(v)
        self.someValue = v
      }
    }
  }
}

let instance1 = A()

dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INTERACTIVE, 0)) {
  instance1.increaseValueBy1000()
}

instance1.increaseValueBy1000()
Run Code Online (Sandbox Code Playgroud)

我在控制台中看不到任何print语句.如果我删除障碍线工作相当好.在这种情况下我做错了为什么我的障碍不允许打印?

barrier swift

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

通过NSData和Data提供不同的控制台输出数据(Xcode 8 beta 6,Swift 3)

我写了一小段常用代码,但发现我的代码没有从这行代码返回服务器的十六进制数据:

let currentData = try! Data(contentsOf: fullURL!)
print("currentData=", currentData)
Run Code Online (Sandbox Code Playgroud)

并输出:

currentData= 24419 bytes
Run Code Online (Sandbox Code Playgroud)

我试图使用Leo的评论链接:

stackoverflow.com/q/39075043/2303865

我得到一些没有空格的十六进制数据,验证器(http://jsonprettyprint.com)无法识别它并返回null.

xcode nsdata swift swift3

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

如何从xib文件的静态单元格的详细信息披露创建segue

有一些我想不通的问题。我在 xib 文件中有一个静态单元格,我想从该单元格的详细信息披露附件转为其他视图控制器。

猜猜我必须使用这种方法:

func tableView(_ tableView: UITableView, accessoryButtonTappedForRowWith indexPath: IndexPath) {
    self.performSegue(withIdentifier: "SegueID", sender: self) // #ERROR
}
Run Code Online (Sandbox Code Playgroud)

但我有一个错误:

无法将“Lists.ListViewController”(0x104c0e7b8)类型的值转换为“UITableViewCell”(0x106875bf8)。

如何正确创建此转场?

segue swift

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