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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

iOS

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

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Swift

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

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

Q&A

解決済

1回答

2728閲覧

iOSアプリケーションとRailsサーバを作りたい!連携してする方法がわかりません。

YUKImidaifucu

総合スコア16

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

iOS

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

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Swift

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

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

0グッド

0クリップ

投稿2016/12/18 10:53

iOSアプリケーションでログインをすると、railsで作ったwebサーバから情報を引き出し、アプリケーションの画面で表示するといったものを作りたいと思っています。

今の開発進行状況は、railsでデータベースは作ることができています。
また、アプリケーションの方も既存のAPIから情報を引き出し表示することはできています。

?????????????????????????????????

railsサーバからどうやって、
iOSアプリケーションに表示したら良いのかわかりません。

????????????????????????????????

以下に作成したコードとその開発環境を記載しています。
エラーもまだ少し残っていますが…
どなたかお助けください!!!

よろしくお願いします。

開発環境
Ubuntuを使用してサーバを作成しています。
・ruby 2.3
・rails 5.0
・PostgreSQL

以下の画像のようなデータから、setaiと書かれている1や2のような番号のリクエストによって、testと書かれたSetai nameをアプリケーションに返したいです。
イメージ説明

iOSアプリケーションはMacで開発しました。
・Xcode 8.2
・Swift 3

アプリケーションの画面とコードはこのようになっています。

Swift

1import UIKit 2 3class ViewController: UIViewController { 4 @IBOutlet weak var zipTextField: UITextField! 5 @IBOutlet weak var idLabel: UILabel! 6 @IBAction func tapReturn() { 7 } 8 @IBAction func tapSearch() { 9 guard let ziptext = zipTextField.text else { 10 // 値がnilだったら終了 11 return 12 } 13 // リクエストするURLを作る 14 //let urlStr = "http://api.zipaddress.net/?zipcode=\(ziptext)" 15 let urlStr = "http://168.192.l.l:3000/setai_master/index" 16 17 18 if let url = NSURL(string: urlStr){ 19 print("if in") 20 // urlオブジェクトがnilでなかったら、検索処理オブジェクトを作る 21 let urlSession = URLSession.shared 22 // 「検索処理が完了したら、onGetAddressを呼び出す」というタスクを作る 23 let task = urlSession.dataTask(with: url as URL, completionHandler: self.onGetAddress) 24 // タスクの実行 25 task.resume() 26 print("task start") 27 } 28 } 29 30 //検索処理が完了したら実行する 31 func onGetAddress(data: Data?,res: URLResponse?, error: Error?){ 32 // 受け取ったdataをJSON解析する。エラーになったらcatchへジャンプする 33 do{ 34 // dataのJSON解析実行 35 let jsonDic = try JSONSerialization.jsonObject(with: data!, options:JSONSerialization.ReadingOptions.mutableContainers ) as! NSDictionary 36 // 解析できた値を調べる 37 if let code = jsonDic["code"] as? Int{ 38 // codeという項目が整数ならAPIからコード情報 39 if code != 200{ 40 if let errmsg = jsonDic["message"] as? String{ 41 print(errmsg) 42 //dispatch_async(dispatch_get_main_queue()){ 43 DispatchQueue.main.async { 44 self.idLabel.text = errmsg 45 } 46 } 47 } 48 } 49 50 if let data = jsonDic["data"] as? NSDictionary{ 51 if let pref = data["pref"] as? String{ 52 print("世帯名は\(pref)です") 53 //dispatch_async(dispatch_get_main_queue()){ 54 DispatchQueue.main.async { 55 self.idLabel.text = pref 56 } 57 } 58 } 59 } catch { 60 print("エラー") 61 } 62 63 //確認のためdataを表示する 64 //print("確認用:") 65 print(data!) 66 } 67 68 override func viewDidLoad() { 69 super.viewDidLoad() 70 // Do any additional setup after loading the view, typically from a nib. 71 } 72 73 override func didReceiveMemoryWarning() { 74 super.didReceiveMemoryWarning() 75 // Dispose of any resources that can be recreated. 76 } 77 78 79}

よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

railsで作ったWebサーバーに対して、URLRequestを利用してURLを実行すれば、後は通常のWebアプリと同じです。

swift

1let url = URL(string: "http://tekito.com")! 2let request = URLRequest(url: url) 3let session = URLSession.shared 4let task = session.dataTask(with: request, completionHandler: { 5 (data, response, error) -> Void in 6 // レスポンス受信後の処理 7})

イントラネットなど閉じた環境でなければ、HTTPSにした方が良いと思います。

投稿2016/12/18 15:42

shanxia

総合スコア1038

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

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

YUKImidaifucu

2016/12/27 04:05

回答ありがとうございます! なるほど…!できました! HTTPSでもできるようにもできました! ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問