質問編集履歴
10
やりたいことの明確化
title
CHANGED
File without changes
|
body
CHANGED
@@ -6,11 +6,12 @@
|
|
6
6
|
FatSecretという全世界の製品を網羅する栄養データベースにアクセスし、そのデータをグラフに反映させようとしています。
|
7
7
|
|
8
8
|
###実現したい動作フロー
|
9
|
+
下記フローの中で4の箇所を実現するために、まずはサンプルデータで上手くいくかどうかを試しています。
|
9
|
-
|
10
|
+
0. scanViewControllerクラスのfoundCodeメソッドでバーコード番号読み取り
|
10
|
-
|
11
|
+
0. nutritionDisplayViewControllerクラスのfoodFindIdForBarcodeメソッドへ1を渡し、製品IDを取得
|
11
|
-
|
12
|
+
0. nutritionDisplayViewControllerクラスのfoodGetメソッドへ2を渡し、栄養パラメータを取得
|
12
|
-
|
13
|
+
0. **BarChartViewクラスに3を投げてグラフを作成**
|
13
|
-
|
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
|
-
|
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
|
-
|
122
|
+
|
132
123
|
/*********************/
|
133
124
|
self.barChartView.delegate = self //ここで "fatal error: unexpectedly found nil while unwrapping an Optional value"
|
134
125
|
/*********************/
|
135
|
-
|
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
実現したい動作フローを追記
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
|
-
|
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
|
-
|
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
|
-
|
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
試したこと追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -173,11 +173,18 @@
|
|
173
173
|

|
174
174
|
|
175
175
|
|
176
|
-
###試したこと
|
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
|
-
|
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
試したこと編集
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
試したこと追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -173,10 +173,13 @@
|
|
173
173
|

|
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
スクショ追加
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,
|
158
|
+
public func chartValueSelected(chartView: ChartViewBase, entry: ChartDataEntry, datdex: 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
|
+

|
170
|
+
|
171
|
+
nutritionDisplayViewController内のBarChartViewを選択しています。
|
172
|
+
|
173
|
+

|
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
ちょっとした修正
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
試したこと訂正
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
エラー追記
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
title
CHANGED
File without changes
|
body
CHANGED
@@ -3,14 +3,16 @@
|
|
3
3
|
###前提・実現したいこと
|
4
4
|
Swiftで栄養管理アプリを作っています。
|
5
5
|
大まかな機能としては、バーコードでスキャンした製品の栄養バランスをグラフ化するというものです。
|
6
|
-
FatSecretという全世界の製品を網羅する栄養データベースにアクセスし、そのデータをグラフに反映させ
|
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
|