teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

10

やりたいことの明確化

2016/09/20 11:23

投稿

takhub
takhub

スコア28

title CHANGED
File without changes
body CHANGED
@@ -6,11 +6,12 @@
6
6
  FatSecretという全世界の製品を網羅する栄養データベースにアクセスし、そのデータをグラフに反映させようとしています。
7
7
 
8
8
  ###実現したい動作フロー
9
+ 下記フローの中で4の箇所を実現するために、まずはサンプルデータで上手くいくかどうかを試しています。
9
- 1. scanViewControllerクラスのfoundCodeメソッドでバーコード番号読み取り
10
+ 0. scanViewControllerクラスのfoundCodeメソッドでバーコード番号読み取り
10
- 2. nutritionDisplayViewControllerクラスのfoodFindIdForBarcodeメソッドへ1を渡し、製品IDを取得
11
+ 0. nutritionDisplayViewControllerクラスのfoodFindIdForBarcodeメソッドへ1を渡し、製品IDを取得
11
- 3. nutritionDisplayViewControllerクラスのfoodGetメソッドへ2を渡し、栄養パラメータを取得
12
+ 0. nutritionDisplayViewControllerクラスのfoodGetメソッドへ2を渡し、栄養パラメータを取得
12
- 4. BarChartViewクラスに3を投げてグラフを作成
13
+ 0. **BarChartViewクラスに3を投げてグラフを作成**
13
- 4. scanViewControllerクラスに戻り、transitionメソッドでnutritionDisplayViewControllerクラスへ画面遷移
14
+ 0. scanViewControllerクラスに戻り、transitionメソッドでnutritionDisplayViewControllerクラスへ画面遷移
14
15
 
15
16
  ###発生している問題・エラーメッセージ
16
17
 
@@ -98,18 +99,8 @@
98
99
  // foodFindIdForBarcode()で取得したIDをもとに栄養パラメータを取得(この関数内でのネットワーク通信中にエラーが発生しています)
99
100
  public func foodGet(fid:String) {
100
101
 
101
- let URL = "http://platform.fatsecret.com/rest/server.api"
102
- var parameters = [String: String]()
102
+ //省略(foodFindIdForBarcodeと同様)
103
103
 
104
- parameters["format"] = "json"
105
- parameters["food_id"] = fid
106
-
107
- parameters["method"] = "food.get"
108
-
109
- parameters["oauth_version"] = "1.0"
110
- //省略
111
- parameters["oauth_signature"] = oauthSignatureForMethod("GET", url: NSURL(string: URL)!, parameters: parameters)
112
-
113
104
  Alamofire.request(.GET, URL, parameters: parameters)
114
105
  .responseJSON { response in
115
106
  guard let object = response.result.value else {
@@ -128,11 +119,11 @@
128
119
  if let JSON = response.result.value {
129
120
  print("JSON: \(JSON)")
130
121
  }
131
- print("(1)")
122
+
132
123
  /*********************/
133
124
  self.barChartView.delegate = self //ここで "fatal error: unexpectedly found nil while unwrapping an Optional value"
134
125
  /*********************/
135
- print("(2)")
126
+
136
127
  self.months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
137
128
  let unitsSold = [20.0, 4.0, 6.0, 3.0, 12.0, 16.0, 4.0, 18.0, 2.0, 4.0, 5.0, 4.0]
138
129
 

9

実現したい動作フローを追記

2016/09/20 11:23

投稿

takhub
takhub

スコア28

title CHANGED
File without changes
body CHANGED
@@ -5,6 +5,13 @@
5
5
  大まかな機能としては、バーコードでスキャンした製品の栄養バランスをグラフ化するというものです。
6
6
  FatSecretという全世界の製品を網羅する栄養データベースにアクセスし、そのデータをグラフに反映させようとしています。
7
7
 
8
+ ###実現したい動作フロー
9
+ 1. scanViewControllerクラスのfoundCodeメソッドでバーコード番号読み取り
10
+ 2. nutritionDisplayViewControllerクラスのfoodFindIdForBarcodeメソッドへ1を渡し、製品IDを取得
11
+ 3. nutritionDisplayViewControllerクラスのfoodGetメソッドへ2を渡し、栄養パラメータを取得
12
+ 4. BarChartViewクラスに3を投げてグラフを作成
13
+ 4. scanViewControllerクラスに戻り、transitionメソッドでnutritionDisplayViewControllerクラスへ画面遷移
14
+
8
15
  ###発生している問題・エラーメッセージ
9
16
 
10
17
  FatSecretのデータベースへアクセス中にView(barChartView)へグラフを書き込もうとすると下記エラーが発生してしまいます。
@@ -22,11 +29,25 @@
22
29
 
23
30
  ###該当のソースコード
24
31
  ```swift
25
- import UIKit
26
- import Alamofire
32
+ // scanViewController.swift
27
- import SwiftyJSON
28
- import Charts
29
33
 
34
+ // バーコード番号を読み取る関数
35
+ public func foundCode(scannedBarcode: String) {
36
+ nutritionDisplayViewController().foodFindIdForBarcode(scannedBarcode)
37
+ //省略
38
+ transition()
39
+ }
40
+
41
+ func transition() {
42
+ let next = self.storyboard?.instantiateViewControllerWithIdentifier("modal") as! nutritionDisplayViewController
43
+ self.navigationController?.pushViewController(next, animated: true)
44
+ //print(test)
45
+ }
46
+ ```
47
+
48
+ ```swift
49
+ // nutritionDisplayViewController.swift
50
+
30
51
  public class nutritionDisplayViewController: UIViewController, ChartViewDelegate {
31
52
 
32
53
  @IBOutlet weak var barChartView: BarChartView!
@@ -50,10 +71,7 @@
50
71
  parameters["barcode"] = scannedBarcode
51
72
 
52
73
  parameters["oauth_version"] = "1.0"
53
- parameters["oauth_signature_method"] = "HMAC-SHA1"
74
+ //省略
54
- parameters["oauth_consumer_key"] = "81a4be8f300b4d8e8f44c51244ca2a38"
55
- parameters["oauth_nonce"] = (NSUUID().UUIDString as NSString).substringToIndex(8)
56
- parameters["oauth_timestamp"] = String(Int64(NSDate().timeIntervalSince1970))
57
75
  parameters["oauth_signature"] = oauthSignatureForMethod("GET", url: NSURL(string: URL)!, parameters: parameters)
58
76
 
59
77
  // FatSecretにリクエスト
@@ -89,10 +107,7 @@
89
107
  parameters["method"] = "food.get"
90
108
 
91
109
  parameters["oauth_version"] = "1.0"
92
- parameters["oauth_signature_method"] = "HMAC-SHA1"
110
+ //省略
93
- parameters["oauth_consumer_key"] = "81a4be8f300b4d8e8f44c51244ca2a38"
94
- parameters["oauth_nonce"] = (NSUUID().UUIDString as NSString).substringToIndex(8)
95
- parameters["oauth_timestamp"] = String(Int64(NSDate().timeIntervalSince1970))
96
111
  parameters["oauth_signature"] = oauthSignatureForMethod("GET", url: NSURL(string: URL)!, parameters: parameters)
97
112
 
98
113
  Alamofire.request(.GET, URL, parameters: parameters)

8

試したこと追記

2016/09/20 10:01

投稿

takhub
takhub

スコア28

title CHANGED
File without changes
body CHANGED
@@ -173,11 +173,18 @@
173
173
  ![イメージ説明](fa26eba14e27307daa1abde899c6672e.png)
174
174
 
175
175
 
176
- ###試したこと(1)
176
+ ###試したこと
177
+ 1.nilとなっている箇所の特定
178
+
179
+ ---
177
180
  エラー箇所特定のため、print("(1)")とprint("(2)")を書いてみたところ、(1)のみ表示されるため、self.barChartView.delegate = selfが上手くいっていないと思います。
178
181
  nilが返されていると思われるself.barChartView.delegateの情報を見ようと、print(self.barChartView.delegate)で出力してみましたが、何も出力されません。
179
182
 
183
+
184
+
180
- ###試したこと(2)
185
+ 2.viewDidLoad内への移動
186
+
187
+ ---
181
188
  下記の部分をviewDidLoad内に書いてみました。動作するものの、これではネットワーク通信で取得したデータを反映させようがないのでダメですね。
182
189
 
183
190
  ```swift
@@ -195,6 +202,27 @@
195
202
  let ll = ChartLimitLine(limit: 10.0, label: "Target")
196
203
  ```
197
204
 
205
+ 3.response.dataの確認
206
+
207
+ ---
208
+ ```
209
+ 2016-09-20 12:46:13.107 FoodAPISample[2316:1015696] Unable to simultaneously satisfy constraints.
210
+ Probably at least one of the constraints in the following list is one you don't want.
211
+ Try this:
212
+ (1) look at each constraint and try to figure out which you don't expect;
213
+ (2) find the code that added the unwanted constraint or constraints and fix it.
214
+ (
215
+ "<NSLayoutConstraint:0x144d93660 V:|-(20)-[UIInputSetContainerView:0x144d91820] (Names: '|':UITextEffectsWindow:0x144d8eab0 )>",
216
+ "<NSLayoutConstraint:0x144d7fc70 'UIInputWindowController-top' V:|-(0)-[UIInputSetContainerView:0x144d91820] (Names: '|':UITextEffectsWindow:0x144d8eab0 )>"
217
+ )
218
+
219
+ Will attempt to recover by breaking constraint
220
+ <NSLayoutConstraint:0x144d93660 V:|-(20)-[UIInputSetContainerView:0x144d91820] (Names: '|':UITextEffectsWindow:0x144d8eab0 )>
221
+
222
+ Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
223
+ The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.
224
+ ```
225
+
198
226
  ###補足情報(言語/FW/ツール等のバージョンなど)
199
227
  #####バージョン情報
200
228
  Alamofire 3.4

7

試したこと編集

2016/09/20 03:55

投稿

takhub
takhub

スコア28

title CHANGED
File without changes
body CHANGED
@@ -178,8 +178,23 @@
178
178
  nilが返されていると思われるself.barChartView.delegateの情報を見ようと、print(self.barChartView.delegate)で出力してみましたが、何も出力されません。
179
179
 
180
180
  ###試したこと(2)
181
- viewDidLoad内に書いてみました。動作するものの、これではネットワーク通信で取得したデータを反映させようがないのでダメですね。
181
+ 下記の部分をviewDidLoad内に書いてみました。動作するものの、これではネットワーク通信で取得したデータを反映させようがないのでダメですね。
182
182
 
183
+ ```swift
184
+ self.barChartView.delegate = self
185
+ self.months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
186
+ let unitsSold = [20.0, 4.0, 6.0, 3.0, 12.0, 16.0, 4.0, 18.0, 2.0, 4.0, 5.0, 4.0]
187
+
188
+ self.setChart(self.months, values: unitsSold)
189
+ self.barChartView.descriptionText = ""
190
+ self.barChartView.xAxis.labelPosition = .Bottom
191
+ self.barChartView.backgroundColor = UIColor(red: 189/255, green: 195/255, blue: 199/255, alpha: 1)
192
+
193
+ self.barChartView.animate(xAxisDuration: 2.0, yAxisDuration: 2.0, easingOption: .EaseInBounce)
194
+
195
+ let ll = ChartLimitLine(limit: 10.0, label: "Target")
196
+ ```
197
+
183
198
  ###補足情報(言語/FW/ツール等のバージョンなど)
184
199
  #####バージョン情報
185
200
  Alamofire 3.4

6

試したこと追加

2016/09/20 02:51

投稿

takhub
takhub

スコア28

title CHANGED
File without changes
body CHANGED
@@ -173,10 +173,13 @@
173
173
  ![イメージ説明](fa26eba14e27307daa1abde899c6672e.png)
174
174
 
175
175
 
176
- ###試したこと
176
+ ###試したこと(1)
177
177
  エラー箇所特定のため、print("(1)")とprint("(2)")を書いてみたところ、(1)のみ表示されるため、self.barChartView.delegate = selfが上手くいっていないと思います。
178
178
  nilが返されていると思われるself.barChartView.delegateの情報を見ようと、print(self.barChartView.delegate)で出力してみましたが、何も出力されません。
179
179
 
180
+ ###試したこと(2)
181
+ viewDidLoad内に書いてみました。動作するものの、これではネットワーク通信で取得したデータを反映させようがないのでダメですね。
182
+
180
183
  ###補足情報(言語/FW/ツール等のバージョンなど)
181
184
  #####バージョン情報
182
185
  Alamofire 3.4

5

スクショ追加

2016/09/20 02:45

投稿

takhub
takhub

スコア28

title CHANGED
File without changes
body CHANGED
@@ -1,4 +1,4 @@
1
- お世話になります。
1
+ お世話になります。長文になりますがお許しください。
2
2
 
3
3
  ###前提・実現したいこと
4
4
  Swiftで栄養管理アプリを作っています。
@@ -155,7 +155,7 @@
155
155
  barChartView.data = chartData
156
156
  }
157
157
 
158
- public func chartValueSelected(chartView: ChartViewBase, entry: ChartDataEntry, dataSetIndex: Int, highlight: ChartHighlight) {
158
+ public func chartValueSelected(chartView: ChartViewBase, entry: ChartDataEntry, dat![イメージ説明](2d825031817cd81197be20b7d407c8eb.png)dex: Int, highlight: ChartHighlight) {
159
159
  print("\(entry.value) in \(months[entry.xIndex])")
160
160
  }
161
161
 
@@ -163,6 +163,16 @@
163
163
  //省略
164
164
 
165
165
  ```
166
+ ###Storyboard
167
+ Storyboard全体のイメージです。nutritionDisplayViewControllerを選択しています。
168
+
169
+ ![イメージ説明](082b3d8cc9c8ae2873c29d29850caf81.png)
170
+
171
+ nutritionDisplayViewController内のBarChartViewを選択しています。
172
+
173
+ ![イメージ説明](fa26eba14e27307daa1abde899c6672e.png)
174
+
175
+
166
176
  ###試したこと
167
177
  エラー箇所特定のため、print("(1)")とprint("(2)")を書いてみたところ、(1)のみ表示されるため、self.barChartView.delegate = selfが上手くいっていないと思います。
168
178
  nilが返されていると思われるself.barChartView.delegateの情報を見ようと、print(self.barChartView.delegate)で出力してみましたが、何も出力されません。

4

ちょっとした修正

2016/09/20 02:34

投稿

takhub
takhub

スコア28

title CHANGED
File without changes
body CHANGED
@@ -163,22 +163,21 @@
163
163
  //省略
164
164
 
165
165
  ```
166
-
167
- ######利用しているAPI
168
- [FatSecret Platform REST API](https://platform.fatsecret.com/api/Default.aspx?screen=rapih)
169
-
170
166
  ###試したこと
171
167
  エラー箇所特定のため、print("(1)")とprint("(2)")を書いてみたところ、(1)のみ表示されるため、self.barChartView.delegate = selfが上手くいっていないと思います。
172
168
  nilが返されていると思われるself.barChartView.delegateの情報を見ようと、print(self.barChartView.delegate)で出力してみましたが、何も出力されません。
173
169
 
174
170
  ###補足情報(言語/FW/ツール等のバージョンなど)
175
- ######バージョン情報
171
+ #####バージョン情報
176
172
  Alamofire 3.4
177
173
  Charts 2.2.5
178
174
  XCode 7
179
175
  iOS 9.3.5
180
176
 
181
- ######利用しているライブラリ
177
+ #####利用しているライブラリ
182
178
  [ios-charts](https://github.com/danielgindi/Charts)
183
179
  [Alamofire](https://github.com/Alamofire/Alamofire)
184
- [SwiftyJSON](https://github.com/SwiftyJSON/SwiftyJSON.git)
180
+ [SwiftyJSON](https://github.com/SwiftyJSON/SwiftyJSON.git)
181
+
182
+ #####利用しているAPI
183
+ [FatSecret Platform REST API](https://platform.fatsecret.com/api/Default.aspx?screen=rapih)

3

試したこと訂正

2016/09/20 02:27

投稿

takhub
takhub

スコア28

title CHANGED
File without changes
body CHANGED
@@ -168,7 +168,7 @@
168
168
  [FatSecret Platform REST API](https://platform.fatsecret.com/api/Default.aspx?screen=rapih)
169
169
 
170
170
  ###試したこと
171
- エラー箇所特定のため、print("(1)")とprint("(2)")を書いてみたところ、self.barChartView.delegate = selfの手前でクラッシュしているのでおそらくそこが上手くいっていないと思います。
171
+ エラー箇所特定のため、print("(1)")とprint("(2)")を書いてみたところ、(1)のみ表示されるため、self.barChartView.delegate = selfが上手くいっていないと思います。
172
172
  nilが返されていると思われるself.barChartView.delegateの情報を見ようと、print(self.barChartView.delegate)で出力してみましたが、何も出力されません。
173
173
 
174
174
  ###補足情報(言語/FW/ツール等のバージョンなど)

2

エラー追記

2016/09/20 02:26

投稿

takhub
takhub

スコア28

title CHANGED
File without changes
body CHANGED
@@ -14,6 +14,12 @@
14
14
  ```
15
15
  エラーが発生している箇所は特定できているのですが、原因がわからず困っております。何卒よろしくお願いします。
16
16
 
17
+ またUI上では、スキャン後に画面遷移する仕様で画面遷移はするのですが、下記のメッセージが表示されてしまいます。(投稿者自身が、データがないときにこのメッセージを表示するようにしています)
18
+
19
+ ```
20
+ "You need to provide data for the chart"
21
+ ```
22
+
17
23
  ###該当のソースコード
18
24
  ```swift
19
25
  import UIKit

1

2016/09/20 02:16

投稿

takhub
takhub

スコア28

title CHANGED
File without changes
body CHANGED
@@ -3,14 +3,16 @@
3
3
  ###前提・実現したいこと
4
4
  Swiftで栄養管理アプリを作っています。
5
5
  大まかな機能としては、バーコードでスキャンした製品の栄養バランスをグラフ化するというものです。
6
- FatSecretという全世界の製品を網羅する栄養データベースにアクセスし、そのデータをグラフに反映させたいのですが、アクセス中にView(barChartView)へグラフを書き込もうとするとエラーが発生してしまいます。
6
+ FatSecretという全世界の製品を網羅する栄養データベースにアクセスし、そのデータをグラフに反映させうとしています。
7
- エラーが発生している箇所は特定できているのですが、原因がわからず困っております。何卒よろしくお願いします。
8
7
 
9
8
  ###発生している問題・エラーメッセージ
10
9
 
10
+ FatSecretのデータベースへアクセス中にView(barChartView)へグラフを書き込もうとすると下記エラーが発生してしまいます。
11
+
11
12
  ```
12
13
  fatal error: unexpectedly found nil while unwrapping an Optional value
13
14
  ```
15
+ エラーが発生している箇所は特定できているのですが、原因がわからず困っております。何卒よろしくお願いします。
14
16
 
15
17
  ###該当のソースコード
16
18
  ```swift