質問編集履歴
2
タイトルが誤っていたので変更しました
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
Tableviewのスクロールが重い
|
test
CHANGED
File without changes
|
1
コードを追加しました
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
### 前提・実現したいこと
|
2
2
|
|
3
|
-
Xcodeで開発しているiOSアプリで、外部のデーターベースからAPIを使ってListviewに表示させてスムーズにスクロールさせたい。
|
3
|
+
Xcodeで開発している最新の映画を確認できるiOSアプリで、外部のデーターベースからAPIを使ってListviewに表示させてスムーズにスクロールさせたい。
|
4
4
|
|
5
5
|
### 発生している問題・エラーメッセージ
|
6
6
|
|
@@ -10,6 +10,170 @@
|
|
10
10
|
|
11
11
|
Macのキャッシュクリアなども試しましたが効果が見られませんでした。
|
12
12
|
|
13
|
+
### コード
|
14
|
+
|
15
|
+
```Swift
|
16
|
+
|
17
|
+
static func searchMovie(count : Int) {
|
18
|
+
|
19
|
+
//リクエストURLの組み立て
|
20
|
+
|
21
|
+
guard let req_url = URL(string: "https://api.themoviedb.org/3/movie/upcoming?page=(count)&language=jp&api_key=45cfffebd76a148b4c8907aed12b6eae"
|
22
|
+
|
23
|
+
) else {
|
24
|
+
|
25
|
+
return
|
26
|
+
|
27
|
+
}
|
28
|
+
|
29
|
+
//リクエストに必要な情報を生成
|
30
|
+
|
31
|
+
let req = URLRequest(url: req_url)
|
32
|
+
|
33
|
+
|
34
|
+
|
35
|
+
//リクエストをタスクとして登録
|
36
|
+
|
37
|
+
let task = URLSession.shared.dataTask(with: req, completionHandler: {
|
38
|
+
|
39
|
+
(data , response , error) in
|
40
|
+
|
41
|
+
do {
|
42
|
+
|
43
|
+
// JSON Decoderのインスタンス取得
|
44
|
+
|
45
|
+
let decoder = JSONDecoder()
|
46
|
+
|
47
|
+
// 受け取ったJSONデータを解析して格納
|
48
|
+
|
49
|
+
let json = try decoder.decode(ResultJson.self , from: data!)
|
50
|
+
|
51
|
+
//print(json)
|
52
|
+
|
53
|
+
// 映画の情報が取得できているか確認
|
54
|
+
|
55
|
+
if let resultList = json.results {
|
56
|
+
|
57
|
+
// 取得している映画の情報の数だけ処理する
|
58
|
+
|
59
|
+
for results in resultList {
|
60
|
+
|
61
|
+
// 映画のタイトル、公開日、ポスターのデータがあるか確認
|
62
|
+
|
63
|
+
if let original_title = results.original_title , var release_date = results.release_date , var
|
64
|
+
|
65
|
+
poster_path = results.poster_path {
|
66
|
+
|
67
|
+
// 公開日の”-”の文字が邪魔なので削除
|
68
|
+
|
69
|
+
if let range = release_date.range(of:"-") {
|
70
|
+
|
71
|
+
release_date.removeSubrange(range)
|
72
|
+
|
73
|
+
if let range = release_date.range(of:"-") {
|
74
|
+
|
75
|
+
release_date.removeSubrange(range)
|
76
|
+
|
77
|
+
}
|
78
|
+
|
79
|
+
}
|
80
|
+
|
81
|
+
// 画像ファイルの”/”が邪魔なので削除
|
82
|
+
|
83
|
+
if let range = poster_path.range(of:"/") {
|
84
|
+
|
85
|
+
poster_path.removeSubrange(range)
|
86
|
+
|
87
|
+
}
|
88
|
+
|
89
|
+
// それぞれの配列に入れる
|
90
|
+
|
91
|
+
movieTitleList.append(original_title)
|
92
|
+
|
93
|
+
moviePosterPathList.append(URL(string: "https://image.tmdb.org/t/p/w500/(poster_path)")!)
|
94
|
+
|
95
|
+
|
96
|
+
|
97
|
+
// 公開日は後でソートしたいのでInt型に変換して格納
|
98
|
+
|
99
|
+
movieReleaseDateList.append(Int(release_date)!)
|
100
|
+
|
101
|
+
// 日付の配列にも公開日を格納
|
102
|
+
|
103
|
+
DatemovieReleaseDateList.append(ViewController.dateFormater.date(from: release_date)!)
|
104
|
+
|
105
|
+
|
106
|
+
|
107
|
+
// print(date?.description ?? "nil")
|
108
|
+
|
109
|
+
// 公開日に合わせてタイトル、ポスターの画像を降順にソート
|
110
|
+
|
111
|
+
for _ in 0..<movieReleaseDateList.count-1 {
|
112
|
+
|
113
|
+
for j in 0..<movieReleaseDateList.count-1 {
|
114
|
+
|
115
|
+
if(movieReleaseDateList[j] > movieReleaseDateList[j+1]){
|
116
|
+
|
117
|
+
let t = movieReleaseDateList[j]
|
118
|
+
|
119
|
+
movieReleaseDateList[j] = movieReleaseDateList[j+1]
|
120
|
+
|
121
|
+
movieReleaseDateList[j+1] = t
|
122
|
+
|
123
|
+
|
124
|
+
|
125
|
+
let k = movieTitleList[j]
|
126
|
+
|
127
|
+
movieTitleList[j] = movieTitleList[j+1]
|
128
|
+
|
129
|
+
movieTitleList[j+1] = k
|
130
|
+
|
131
|
+
|
132
|
+
|
133
|
+
let l = moviePosterPathList[j]
|
134
|
+
|
135
|
+
moviePosterPathList[j] = moviePosterPathList[j+1]
|
136
|
+
|
137
|
+
moviePosterPathList[j+1] = l
|
138
|
+
|
139
|
+
|
140
|
+
|
141
|
+
let p = DatemovieReleaseDateList[j]
|
142
|
+
|
143
|
+
DatemovieReleaseDateList[j] = DatemovieReleaseDateList[j+1]
|
144
|
+
|
145
|
+
DatemovieReleaseDateList[j+1] = p
|
146
|
+
|
147
|
+
}
|
148
|
+
|
149
|
+
}
|
150
|
+
|
151
|
+
}
|
152
|
+
|
153
|
+
}
|
154
|
+
|
155
|
+
}
|
156
|
+
|
157
|
+
}
|
158
|
+
|
159
|
+
semaphore.signal()
|
160
|
+
|
161
|
+
} catch {
|
162
|
+
|
163
|
+
print("エラー発生")
|
164
|
+
|
165
|
+
}
|
166
|
+
|
167
|
+
})
|
168
|
+
|
169
|
+
//ダウンロード開始
|
170
|
+
|
171
|
+
task.resume()
|
172
|
+
|
173
|
+
}
|
174
|
+
|
175
|
+
```
|
176
|
+
|
13
177
|
### 補足情報(FW/ツールのバージョンなど)
|
14
178
|
|
15
179
|
・Xcode 10.2.1
|