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

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

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

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

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

Q&A

解決済

2回答

3395閲覧

fatal error: Can't form Range with end < startの解消法

funkyfrea

総合スコア86

Swift

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

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

0グッド

0クリップ

投稿2015/12/23 10:19

編集2015/12/23 13:27

お世話になっております。

以下のコードを書いたところ、
fatal error: Can't form Range with end < startというエラーになります。
エラーからSelectPhotos.countが何かのミスで1以下になってしまっているのかと思い、print(SelectPhotos.count)したところ5が入っており、問題ないようでした。さらに、print(SelectPhotos.count)が3や4が入った時はエラーにならず、5の時だけエラーになってしまいます。

swift

1 print(SelectPhotos.count) 2 for ind in 1...SelectPhotos.count{ 3 4 let asset = SelectPhotos[ind-1] 5 }

以下、上記のエラー箇所が含まれるクラス

swift

1// 2// NoteViewController.swift 3// じぶんノート 4// 5// Created by kuroda takumi on 2015/12/18. 6// Copyright © 2015年 BiyousiNote.inc. All rights reserved. 7// 8 9import UIKit 10import Photos 11 12class NoteViewController: UIViewController { 13 14 var SelectPhotos:[PHAsset] = [PHAsset]() 15 16 @IBOutlet weak var topimage: UIImageView! 17 @IBOutlet weak var imageView1: UIImageView! 18 @IBOutlet weak var imageview2: UIImageView! 19 @IBOutlet weak var imageView3: UIImageView! 20 @IBOutlet weak var imageView4: UIImageView! 21 @IBOutlet weak var imageView5: UIImageView! 22 23 @IBOutlet weak var nonImageIqon: UIImageView! 24 25 26 override func viewDidLoad() { 27 super.viewDidLoad() 28 29 self.photoSet() 30 // Do any additional setup after loading the view. 31 } 32 33 func photoSet(){ 34 35 36 print(SelectPhotos.count) 37//エラー箇所 38 for ind in 1...SelectPhotos.count{ 39 40 let asset = SelectPhotos[ind-1] 41 42 let imageView:UIImageView = self.view.viewWithTag(ind) as! UIImageView 43 44 let manager:PHImageManager = PHImageManager() 45 manager.requestImageForAsset(asset, targetSize: CGSizeMake(self.view.bounds.size.width,360), contentMode: PHImageContentMode.AspectFill, options: nil, resultHandler:{(image,info) -> Void in 46 47 //セレクトの一枚目はトップに 48 if ind == 1{ 49 self.topimage.image = image 50 } 51 imageView.image = image 52 53 }) 54 55 } 56 57 for ind in SelectPhotos.count+1...SelectPhotos.count+(5-SelectPhotos.count){ 58 let imageView:UIImageView = self.view.viewWithTag(ind) as! UIImageView 59 60 imageView.image = UIImage(named: "Stack of Photos-26") 61 } 62 } 63 64 @IBAction func photoButtonTaped(sender:UIButton){ 65 switch sender.tag{ 66 case 6: 67 if SelectPhotos.count == 0{ 68 69 70 } 71 let asset = SelectPhotos[0] 72 let manager = PHImageManager() 73 manager.requestImageForAsset(asset, targetSize: CGSizeMake(self.view.bounds.size.width, 360), contentMode: PHImageContentMode.AspectFill, options: nil, resultHandler: {(image,info)->Void in 74 self.topimage.image = image 75 }) 76 case 7: 77 if SelectPhotos.count <= 1{ 78 79 return 80 } 81 82 let asset = SelectPhotos[1] 83 let manager = PHImageManager() 84 manager.requestImageForAsset(asset, targetSize: CGSizeMake(self.view.bounds.size.width, 360), contentMode: PHImageContentMode.AspectFill, options: nil, resultHandler: {(image,info)->Void in 85 86 self.topimage.image = image 87 88 }) 89 90 case 8: 91 if SelectPhotos.count <= 2{ 92 return 93 } 94 95 let asset = SelectPhotos[2] 96 let manager = PHImageManager() 97 manager.requestImageForAsset(asset, targetSize: CGSizeMake(self.view.bounds.size.width, 360), contentMode: PHImageContentMode.AspectFill, options: nil, resultHandler: {(image,info)->Void in 98 99 self.topimage.image = image 100 101 }) 102 case 9: 103 if SelectPhotos.count <= 3{ 104 return 105 } 106 let asset = SelectPhotos[3] 107 let manager = PHImageManager() 108 manager.requestImageForAsset(asset, targetSize: CGSizeMake(self.view.bounds.size.width, 360), contentMode: PHImageContentMode.AspectFill, options: nil, resultHandler: {(image,info)->Void in 109 110 self.topimage.image = image 111 112 }) 113 case 10: 114 if SelectPhotos.count <= 4{ 115 return 116 } 117 118 let asset = SelectPhotos[4] 119 let manager = PHImageManager() 120 manager.requestImageForAsset(asset, targetSize: CGSizeMake(self.view.bounds.size.width, 360), contentMode: PHImageContentMode.AspectFill, options: nil, resultHandler: {(image,info)->Void in 121 122 self.topimage.image = image 123 124 }) 125 default: 126 print("error") 127 128 129 } 130 131 } 132 133 override func viewWillAppear(animated: Bool) { 134 135 } 136 137 override func viewWillDisappear(animated: Bool) { 138 139 } 140 141 override func didReceiveMemoryWarning() { 142 super.didReceiveMemoryWarning() 143 // Dispose of any resources that can be recreated. 144 } 145 146 147 /* 148 // MARK: - Navigation 149 150 // In a storyboard-based application, you will often want to do a little preparation before navigation 151 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 152 // Get the new view controller using segue.destinationViewController. 153 // Pass the selected object to the new view controller. 154 } 155 */ 156 157} 158

イメージ説明
イメージ説明

解決法がお分かりになられましたら、教えていただければと思います。
よろしくお願いします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

実際にエラーが出ているのは
for ind in SelectPhotos.count+1...SelectPhotos.count+(5-SelectPhotos.count){
を実行したところじゃないでしょうか?

ここなら3や4だとエラーにならず、5だとエラーになるという現象と一致します。

スクリーンショットをみると確かに
for ind in 1...SelectPhotos.count
の行でエラーメッセージが出ていますが、上述の箇所でエラーになるのは間違いないので、まずはここを直してから再確認した方がよいと思います。

実際にエラーが発生している箇所とエラー表示箇所が食い違う現象はたまに経験することがあります。私の場合、ビルドを一度クリーンしてから再ビルドするとたいていは治ったと思います。

投稿2015/12/23 13:32

編集2015/12/23 13:47
TakeOne

総合スコア6299

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

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

funkyfrea

2015/12/23 13:59

おかげさまで解決できました。 ありがとうございました!
guest

0

質問の条件だけだとエラーが出ないように思います。他の箇所に原因があるのではないでしょうか。
他の部分のコードや、エラーの際のスクショなどがあればなにかわかるかもしれません。

投稿2015/12/23 12:46

domonr

総合スコア263

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

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

funkyfrea

2015/12/23 13:29

ご回答いただきありがとうございます! 質問にコードとスクリーンショットを追加しました。 目を通していただけると幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問