私は現在、チャットアプリにかなり似たアプリケーションに取り組んでいるので、自分のサーバーを作成し、アプリでストリームを使用してサーバーにメッセージを送信し、そこからメッセージを取得しています。
ボタンなどを押さずにトリガーする必要がある多くの機能があります。たとえば、登録している友人やグループであるオンライン ユーザーを取得しようとするとき、ビューがロードされたので、結果を求める前に結果が得られます
私はこれを試しました:
override func viewDidLoad() {
self.initNetworkCommunication()
self.button.sendActionsForControlEvents(UIControlEvents.TouchUpInside)
var indexSet = NSIndexSet(index: 0)
self.table.reloadSections(indexSet, withRowAnimation: UITableViewRowAnimation.Automatic)
self.table.reloadData()
super.viewDidLoad()
}
func initNetworkCommunication() {
var readStream:Unmanaged<CFReadStream>?;
var writeStream:Unmanaged<CFWriteStream>? ;
CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault,"localhost",8023,&readStream,&writeStream)
inputStream = readStream!.takeUnretainedValue()
outputStream = writeStream!.takeUnretainedValue()
self.inputStream!.delegate=self
self.outputStream!.delegate = self
self.inputStream!.scheduleInRunLoop(NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode)
self.outputStream!.scheduleInRunLoop(NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode)
self.inputStream.open()
self.outputStream.open()
var msg = "iam:\(self.name).groupView\r\n" //i connect to the server in this view
var ptr = msg.nulTerminatedUTF8
var res = outputStream.write(msg, maxLength:msg.lengthOfBytesUsingEncoding(NSASCIIStringEncoding))
}
@IBAction func getGroups(sender : UIButton) {
println("it is pressed")
var msg = "mygroups:\(self.name):sdadsa"
var res = outputStream.write(msg, maxLength: msg.lengthOfBytesUsingEncoding(NSASCIIStringEncoding))
}
私が抱えている問題は、場合によっては touchUpInside イベントがトリガーされ、サーバーから必要なメッセージが表示されない場合があることです。
私が最初に考えたのは、これはサーバーが大量のメッセージを次々と受け取って「ビジー」になるために発生するということでしたが、なぜ時々機能するのでしょうか?
どんなアイデアや意見も私を大いに助けます