所以我在Swift中使用套接字并试图将应用程序与我的服务器连接起来.我让应用程序连接到服务器的IP地址,并netcat在服务器上用于测试.在执行期间,应用程序的控制台输出显示已成功连接到服务器.但是,流委托似乎没有响应.当我输入时netcat,应用控制台没有打印任何内容.我已经搜索了很长一段时间,发现我的实现与其他实现非常相似.也许我在这里遗漏了一些我看不到的东西.
任何想到这个问题将不胜感激!
代码如下:
import UIKit
class ViewController: UIViewController, StreamDelegate {
let addr:String = "52.34.56.78"
let port:Int = 1234
var inputStream: InputStream?
var outputStream: OutputStream?
override func viewDidLoad() {
super.viewDidLoad()
self.connect(host: addr, port: port)
}
func connect(host: String, port: Int) {
Stream.getStreamsToHost(withName: host, port: port, inputStream: &inputStream, outputStream: &outputStream)
if inputStream != nil && outputStream != nil {
inputStream!.delegate = self
outputStream!.delegate = self
inputStream!.schedule(in: RunLoop.main, forMode: RunLoopMode.defaultRunLoopMode)
outputStream!.schedule(in: RunLoop.main, forMode: RunLoopMode.defaultRunLoopMode)
inputStream!.open()
outputStream!.open()
print("successfully connected")
} …Run Code Online (Sandbox Code Playgroud) 因此,我在对表中的行进行重新排序时,UI最终结果不正确。场景如下:
原始表内容:
a
b
c
d
e
Run Code Online (Sandbox Code Playgroud)
如果我将第0行(当前是a)移到第4行(当前是e),则看到的最终结果是:
c
d
e
a
a
Run Code Online (Sandbox Code Playgroud)
上下文的一点点:
该表正在读取Realm对象的列表。我确认Realm对象也已正确更新。如果我tableView.reloadData()在对行进行重新排序后放权,则可以获得正确的UI结果。但是,重新加载数据会给我的应用带来不必要的UI动画。以下是我执行重新排序的代码:
let realm = try! Realm()
realm.beginWrite()
let itemToMove = self.itemList?[fromIndexPath.row]
self.itemList?.remove(at: fromIndexPath.row)
self.itemList?.insert(itemToMove!, at: toIndexPath.row)
try realm.commitWrite()
Run Code Online (Sandbox Code Playgroud)
我曾成功地对未读取Realm对象的表中的行进行重新排序。因此,我不确定这是否与Realm有关。我已经研究了很多,但并没有真正看到任何类似的问题。任何帮助将不胜感激!