我正在尝试使用rest api 监听firebase 事件。问题是未调用回调方法。我正在使用EventSource来实现此目的。这是侦听事件的正确方法吗?
Auth.auth().currentUser?.getIDTokenForcingRefresh(true, completion: { (token, error) in
let server : String = "https://project-XXXXX.firebaseio.com/.json?auth=\(token!)"
let eventSource: EventSource = EventSource(url: server)
eventSource.onOpen {
// When opened
debugPrint("eventSource open")
}
eventSource.onError { (error) in
// When errors
debugPrint("error = \(error?.localizedDescription)")
}
eventSource.onMessage { (id, event, data) in
debugPrint("data = \(data)")
// Here you get an event without event name!
}
eventSource.addEventListener("child_added") { (id, event, data) in
debugPrint("data = \(data)")
// Here you get an event 'event-name'
}
})
Run Code Online (Sandbox Code Playgroud) ios server-sent-events firebase firebase-realtime-database eventsource
我试图使用SpriteKit创建一个暂停菜单,以便在玩家继续游戏时在屏幕上进行动画处理(移动)。
我创建了一个SKAction并在开始运行时就这样运行它:
let duration = TimeInterval(0.5)
let moveAction = SKAction.move(to: CGPoint(x: 0, y: 495) , duration:
duration)
pauseScroll?.run(moveAction)
Run Code Online (Sandbox Code Playgroud)
pauseScroll初始化为:
weak var pauseScroll: SKSpriteNode?
override init(size: CGSize) {
...
let pauseScene = SKScene(fileNamed: "PauseMenu")!
pauseScroll = pauseScene.childNode(withName: "PauseScroll") as?
SKSpriteNode
pauseScroll?.position = CGPoint(x: 0, y: 495)
pauseScroll?.zPosition = 1000
pauseScroll?.move(toParent: self)
}
Run Code Online (Sandbox Code Playgroud)
我在这里要做的是将pauseScroll的UI放置在另一个spritekit.scene文件中,作为实际的GameScene,所有这些操作均在代码中完成。然后,我通过调用.move(toParent:self)将其添加到GameScene中。
事情是,我可以很好地引用pauseScroll,可以对其进行修改,例如更改其位置,为其指定物理身体和碰撞蒙版,在pauseScroll中包含的节点上注册水龙头等。看似一切都在其上运行了SKActions。
我同时为其他SKSpriteNode运行SKAction,它们运行良好,当然它们的初始化方式有所不同,因为它们都是在.init中的代码中设置的,例如:
var background: SKSpriteNode!
override init(size: CGSize) {
...
background = SKSpriteNode(imageNamed: "GameBackground")
background.size = size
addChild(background)
}
Run Code Online (Sandbox Code Playgroud)
然后,以与我在触摸中开始的其他任何操作相同的方式为它们设置动画:
let colorAction = SKAction.colorize(withColorBlendFactor: 0.4,
duration: duration)
background?.run(colorAction) …
Run Code Online (Sandbox Code Playgroud) 我定义了一个名为 MyEnum 的全局枚举:
enum MyEnum: Int{
case year = 100, month, week, day
}
Run Code Online (Sandbox Code Playgroud)
目的是将此枚举存储为我的实体的属性(我在 xcdatamodel 文件中将此枚举属性声明为可转换):
创建 NSManagedObject 子类后,在 +CoreDataProperties.swift 中,我尝试更改
@NSManaged public var myEnum: NSObject
Run Code Online (Sandbox Code Playgroud)
到
@NSManaged public var myEnum: MyEnum
Run Code Online (Sandbox Code Playgroud)
但是在执行saveContext()时,还是出现了错误。我刚开始学习,不知道下一步该怎么做
那么我应该做哪些额外的工作来将我的枚举存储为我的实体的属性?
请快速使用,感谢您的帮助
作为初学者,我曾经在ViewControllers
. 此外,Apple 鼓励这种方法,因为UIViewController
有方法performSegue
和prepareForSegue
.
但是学习VIPER,我读到Router
负责场景之间的转换。第二件事是根据这样的VIPER流程图:
Router
不得与View
.
我绝对不想拒绝使用segues
,因为它非常强大,可以让我轻松地在ViewControllers
.
那么,我应该如何在 之间执行转换ViewControllers
?
我有一个这样的自定义数组
let moreMenuItem = [MoreMenuItem(title: "number1", imageName: "rate"),
MoreMenuItem(title: "number2", imageName: "followFacebook"),
MoreMenuItem(title: "number3", imageName: "email")]
Run Code Online (Sandbox Code Playgroud)
这是我的模特班
class MoreMenuItem {
var title: String?
var imageName: String?
init(title: String, imageName: String) {
self.title = title
self.imageName = imageName }
}
}
Run Code Online (Sandbox Code Playgroud)
现在说我有一个字符串“ number3”,我想检查我的数组的标题中是否有“ number3”。如果是这样,则返回找到number3的索引。有什么建议么?
在此先感谢您的帮助,我有两个API调用,两个都是并发的,任何调用都可以先成功(我不想按顺序调用),两个调用成功后,我必须停止我的活动指示器并重新加载我的tableView ,这是我的代码,但我不知道这是否正确以及如何重新加载我的tableView并停止我的活动指示器.
func downloadDetails(){
let operationQueue: OperationQueue = OperationQueue()
let operation1 = BlockOperation() {
WebServiceManager.getAData(format:A, withCompletion: {(data: Any? , error: Error?) -> Void in
if let success = data {
DispatchQueue.main.async {
(success code)
}
}
})
let operation2 = BlockOperation() {
webServiceManager.getBData(format: B, withCompletion: {(data: Any? , error: Error?) -> Void in
if let success = data {
DispatchQueue.main.async {
(success code)
}
}
})
}
operationQueue.addOperation(operation2)
}
operationQueue.addOperation(operation1)
}
downloadDetails() "calling function"
Run Code Online (Sandbox Code Playgroud) 我在向数组添加值时发生concurrentPerform错误.我按下按钮.在出错的那一刻,myArray01有133个.在其他运行中,myArray01有69个元素.如何删除此错误?
出错线
线程8:EXC_BAD_INSTRUCTION(代码= EXC_I386_INVOP,子代码= 0x0)
在控制台
致命错误:UnsafeMutablePointer.deinitialize with negative count 2017-12-24 11:59:53.438933 + 0300 ap02 [7624:1873749]致命错误:UnsafeMutablePointer.deinitialize with negative count(lldb)
类似主题Swift:UnsafeMutablePointer.deinitialize在附加到数组 Swift时带有负数的致命错误:UnsafeMutablePointer.deinitialize在附加到数组时带有负数的致命错误
var myArray01 = [4444,5555]
@IBAction func button01Pressed(_ sender: Any) {
self.doIt01()
}
func doIt01() {
DispatchQueue.concurrentPerform(iterations: 1000) { iter in
var max = 100000
for iterB in 0..<100000 {
var k = 0
k = k + 1
var half:Int = max/2
if (iterB == half) {
myArray01.append(iter)
}
}
}
}
Run Code Online (Sandbox Code Playgroud) 这是我的Pod文件......
# Uncomment the next line to define a global platform for your project
platform :ios, '11.2'
target 'Karaweik' do
# Comment the next line if you're not using Swift and don't want to use dynamic frameworks
use_frameworks!
pod 'Alamofire'
# Pods for Karaweik
end
Run Code Online (Sandbox Code Playgroud)
我只接到电话AlamofireVersionNumber:
我从服务器返回了一个“几种”不同格式的布尔值(对于相同的结构和字段)。我知道这很荒谬,但我需要找到一种方法来干净地处理它。
所以为了反序列化它,我做了一些类似(示例程序)的事情:
import Foundation
struct Foo: Codable {
var isOpen: Bool?
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
isOpen = try container.decodeIfPresent(Bool.self, forKey: .isOpen)
}
enum CodingKeys: String, CodingKey {
case isOpen
}
}
//He sends any one of these..
let json1 = "{ \"isOpen\": \"true\" }"
let json2 = "{ \"isOpen\": \"false\" }"
let json3 = "{ \"isOpen\": true }"
let json4 = "{ \"isOpen\": false }"
let json5 = "{ \"isOpen\": null }"
let …
Run Code Online (Sandbox Code Playgroud) 以下代码向我抛出异常,通过使用 mariadb 管理器,这与 mysql 未通过,允许我执行 executeUpdate,但不能执行 executeQuery。我寻求解决方案的真相,没有一个是我的情况,因为我没有犯任何这些错误。已经重装了java和mariadb,还是不行。谢谢!
这是我的代码:
package Conexion;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class mainPruebas {
public static void main(String[] args)
{
String url = "jdbc:mariadb://127.0.0.1:3306/buscadorpersonas?autoReconnect=true&useSSL=false";
String user = "root";
String pass = "2222";
Connection conexion=null;
PreparedStatement ps=null;
try {
conexion = DriverManager.getConnection(url,user,pass);
ps = conexion.prepareStatement("SELECT CODIGOCLIENTE, EMPRESA, POBLACION FROM tclientes WHERE POBLACION='?';");
ps.setString(1, "MADRID");
ResultSet rs = ps.executeQuery();
while(rs.next()) {
System.out.println(rs.getString("CODIGOCLIENTE")+" "+rs.getString("EMPRESA")+" "+rs.getString("POBLACION"));
}
conexion.close();
}catch(Exception e) {
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
例外: …