質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

1回答

2881閲覧

一定間隔で同じ処理を繰り返すプログラム

namatamago

総合スコア13

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2015/08/07 10:12

編集2022/01/12 10:55

1秒間に同じ処理を繰り返すプログラムを組もうとしてますが、うまくいきません。
下記に一部除きますが、繰り返し処理を行う部分を掲載します。
どのように修正すればうまくいくでしょうか。

swift

1import UIKit 2 3class ViewController: UIViewController,NSURLSessionDelegate,NSURLSessionDataDelegate{ 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 // Do any additional setup after loading the view, typically from a nib. 8 9 // 通信用のConfigを生成. 10 let myConfig:NSURLSessionConfiguration = NSURLSessionConfiguration.backgroundSessionConfigurationWithIdentifier("backgroundTask") 11 // Sessionを生成. 12 var mySession:NSURLSession = NSURLSession(configuration: myConfig, delegate: self, delegateQueue: nil) 13 // 通信先のURLを生成. 14 let myUrl:NSURL = NSURL(string: "データを送る先のURL")! 15 16 // POST用のリクエストを生成. 17 let myRequest:NSMutableURLRequest = NSMutableURLRequest(URL: myUrl) 18 // POSTのメソッドを指定. 19 myRequest.HTTPMethod = "POST" 20 21 // 送信するデータを生成・リクエストにセット. 22 let str:NSString = "送るデータを書く" 23 let myData:NSData = str.dataUsingEncoding(NSUTF8StringEncoding)! 24 myRequest.HTTPBody = myData 25 26 // タスクの生成. 27 let myTask:NSURLSessionDataTask = mySession.dataTaskWithRequest(myRequest) 28 29 // タスクの実行. 30 myTask.resume() 31 32 let time:NSTimer = NSTimer.scheduledTimerWithTimeInterval(1,target:self,selector:Selector("onUpdate"),userInfo: nil, repeats: true) 33 34 func onUpdate() { 35 36 ここの処理がわかりません。 37 } 38 } 39 40 //通信が終了したときに呼び出されるデリゲート. 41 func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveData data: NSData) { 42 43 // 帰ってきたデータを文字列に変換. 44 var myData:NSString = NSString(data: data, encoding: NSUTF8StringEncoding)! 45 46 // バックグラウンドだとUIの処理が出来ないので、メインスレッドでUIの処理を行わせる. 47 dispatch_async(dispatch_get_main_queue(), { 48 self.myText.text = myData as String 49 }) 50 } 51 52 @IBOutlet weak var myText: UILabel! 53 func URLSessionDidFinishEventsForBackgroundURLSession(session: NSURLSession) { 54 println("URLSessionDidFinishEventsForBackgroundURLSession") 55 } 56 57 override func didReceiveMemoryWarning() { 58 super.didReceiveMemoryWarning() 59 // Dispose of any resources that can be recreated. 60 } 61 62 63} 64 65 66

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

具体的にどううまくいかないのか、コンパイルエラーなのか、実行時に例外が発生するのか、などが分からないので、あくまで参考までに。

onUpdateをしっかりそのクラスのメソッドとして定義していますか?
例えば、viewDidLoadでタイマーをスタートするとした場合、

Swift

1override func viewDidLoad() { 2 super.viewDidLoad() 3 4 // 引数は省略しますが、あるものとして扱ってください 5 let time: NSTimer = NSTimer.scheduledTimerWithTimeInterval() 6 7 func onUpdate() { 8 NSLog("called: onUpdate") 9 } 10}

これでは、恐らく「unrecognized selector sent to instance」でNSInvalidArgumentExceptionが発生すると思われます。現在手元に調査環境がないので間違っているかもしれませんが・・・
万が一、上記のようなコードを書いていた場合は、以下のように修正してみてください。

Swift

1override func viewDidLoad() { 2 super.viewDidLoad() 3 4 // 引数は省略しますが、あるものとして扱ってください 5 let time: NSTimer = NSTimer.scheduledTimerWithTimeInterval() 6} 7 8func onUpdate() { 9 NSLog("called: onUpdate") 10}

Objective-Cのときは、コールバックの引数にNSTimerを付加すると正常に動く、ということが稀にありました。
Swiftでは聞いたことないですが、試してみてください。


「そんなはずはない、しっかり定義している」という場合や、「上記のように直したけど、それでも期待通りの動作をしない」という場合は、現状では情報が少ないので、もう少し状況を詳しく書いていただけるとありがたいです。

投稿2015/08/07 11:00

shiolier

総合スコア1156

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

namatamago

2015/08/10 02:10

うまくいきません。 追記で、プログラムのソースを全て記載させていただきました。 onUpdateのところの処理がよくわかりません。
namatamago

2015/08/10 02:12

目的としましては、データベースに1秒置きに値を送ることです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問