小编Ria*_*man的帖子

如何使用 Firebase 在 IOS 上实现服务器发送事件?

我正在尝试使用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

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

SKAction仅在睡眠后或在运行调试器时运行

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

sleep ios sprite-kit skaction swift

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

如何将我自己的枚举存储为 CoreData 中的属性

我定义了一个名为 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()时,还是出现了错误。我刚开始学习,不知道下一步该怎么做

那么我应该做哪些额外的工作来将我的枚举存储为我的实体的属性?

请快速使用,感谢您的帮助

core-data ios

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

在 VIPER 架构中在哪里以及如何执行 segue?

作为初学者,我曾经在ViewControllers. 此外,Apple 鼓励这种方法,因为UIViewController有方法performSegueprepareForSegue.

但是学习VIPER,我读到Router负责场景之间的转换。第二件事是根据这样的VIPER流程图:

在此处输入图片说明

Router不得与View.

我绝对不想拒绝使用segues,因为它非常强大,可以让我轻松地在ViewControllers.

那么,我应该如何在 之间执行转换ViewControllers

transition design-patterns viper segue swift

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

从Swift中的模型数组获取索引

我有一个这样的自定义数组

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的索引。有什么建议么?

arrays ios swift

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

如何在swift 4中进行两个并发API调用

在此先感谢您的帮助,我有两个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)

nsoperation nsoperationqueue ios swift4 swift4.1

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

concurrentPerform在向数组添加值时出现UnsafeMutablePointer.deinitialize错误

我在向数组添加值时发生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)

grand-central-dispatch ios

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

不能打电话给Alamofire.request(...)

这是我的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:

在此输入图像描述

ios swift alamofire

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

Swift 解码具有多种不同格式的数据类型

我从服务器返回了一个“几种”不同格式的布尔值(对于相同的结构和字段)。我知道这很荒谬,但我需要找到一种方法来干净地处理它。

所以为了反序列化它,我做了一些类似(示例程序)的事情:

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)

ios codable decodable swift4.2

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

以编程方式更新通过Inspector设置的Autolayout约束

我有一个ViewController,里面有一个tableview.我手动设置了自动布局.现在我试图以编程方式更改自动布局约束.我怎样才能做到这一点?

这是我的代码截图

谢谢

ios swift

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

异常 java.sql.SQLException: 无法在位置 (...) 设置参数。小白

以下代码向我抛出异常,通过使用 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)

例外: …

java mysql mariadb

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