swiftでのアプリ制作でエラー内容がわからない

投稿者: Anonymous swift、Xcode9.0でクイズアプリを作っています。 アプリ作りは初めてでプログラミング言語自体入門者です。 シミュレータでうまくアプリが動きません。 コンパイルは成功するのですが、シミュレータにLaunch画面以外表示されず、 viewControllerの以下の数カ所にエラーコードが出てしまいます。 以下の部分は赤く染まり、Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)と表示 func Hide(){ LabelEnd.isHidden = true Next.isHidden = true 以下の部分も上記と同じくBAD_INSTRUCTIONと表示 override func viewDidLoad() { super.viewDidLoad() Hide() RandomQuestions() デバッグエリアに fatal error: unexpectedly found nil while unwrapping an Optional value と表示されているので、 コードにあるoutlet接続とaction接続をstoryboardと再接続をしましたが、 問題は解決されません。 どこに問題があるのか教えていただけないでしょうか。 どうかご教授お願いします。 独力ではお手上げ状態です。 アプリ作りを始めて10日目。 もう挫折しそう、、、。 import UIKit class ViewController: UIViewController { @IBOutlet weak…(Continue Reading)

CGFloatのfor in文

投稿者: Anonymous 「画像を指定のサイズになるまで圧縮する」という処理をするために、下のURLに載っているコードをSwift2.3で使っていたのですが、Cスタイルのfor文(No.1)をSwift3.0に書き直そうとしたところ、エラーが出ました(No.3)。 CGFloatの値でfor in文をつくるにはどうすればいいのでしょうか? http://seeku.hateblo.jp/entry/2016/03/06/193628 No.1 画像を指定のサイズになるまで圧縮するfor文 for qualityUse = qualityMax; qualityUse >= qualityMin; qualityUse -= qualityDif { let data = UIImageJPEGRepresentation(resize, qualityUse) if checkDataSize(data) { return data } } No.2 swift3.0で書き直したコード for qualityUse in qualityMax…qualityMin as [CGFloat]{ qualityUse -= qualityDif let data = UIImageJPEGRepresentation(resize, qualityUse) if checkDataSize(data) { return data } } No.3…(Continue Reading)

Realmをデータソースにしてテーブルビューの並べ替えをしたい

投稿者: Anonymous RealmにてPrimaryキーを書き換えようとしています。 それによってTableViewの並べ替えをしたいと考えております。 しかし以下のコードではプライマリーキーのIDを書き換える時にエラーが出ます。 Terminating app due to uncaught exception ‘RLMException’, reason: ‘Primary key can’t be changed after an object is inserted.’ エラーメッセージと公式サイトの情報から推察すると、プライマリーキーは変更できないという理解でよろしいでしょうか? できないとすると、一般的には一度すべてのデータ(多くても数十件のデータを想定)を避難して、DBをすべて削除し採番し直して追加ということで対処するのがいいのでしょうか。 もしくは、テーブルに表示順を持たせて、それを書き換えるのがいいのでしょうか。 ご教授いただけないでしょうか。 よろしくお願いいたします。 ※以下のコードは、間違いがあるかもしれませんので、したいことを理解する目的で参考にしていただければと思います。 //メインデータ class mainDataTable: Object { dynamic var ID = Int() let Days = List<subDataTable>() //LinkingObjects(fromType: subDataTable.self, property: “Day”) // dynamic var CategoryNo = Int() override static…(Continue Reading)

`..

投稿者: Anonymous Swift2.2からSwift3に移行しており、NSMakeRangeを書き換える際にエラーが発生しました。 そのエラーは解消できているのですが、処理でどうしても腑に落ちない点があります。 Swift2.2 let data = “あいうえお”dataUsingEncoding(NSShiftJISStringEncoding) let subData = data?.subdataWithRange(NSMakeRange(0, 10)) Swift3 let data = “あいうえお”.data(using: String.Encoding.shiftJIS) // 10bytes let subData = data?.subdata(in: 0 ..< 10) この場合、NSMakeRange(0, 10)なので0 ..< 11にして、0〜10の範囲を取得できるだろうと思っていたらエラーが発生し、以下のログが出力されました。 Termination app due to uncaught exception NSRangeException, reason: -[_MSInlineData subdataWithRange:]: range {0, 11} exceeds data length 10 今までの記憶では 0 ..< 10 =>…(Continue Reading)

Swift3でUIImageの色情報を抜き出す

投稿者: Anonymous http://swift-salaryman.com/pixcelcolor.php のUIImageの色情報を抜き出すをを参考にSwift3として動作するようにしてみたいと思い let url = URL(string:”http://swift-salaryman.com/files/image/page_top.gif”)! let imageData = try? Data(contentsOf: url) let image = UIImage(data:imageData!) func getPixelColorFromUIImage(myUIImage:UIImage, pos:CGPoint) -> UIColor { let pixelData = myUIImage.cgImage!.dataProvider!.data let data: UnsafePointer = CFDataGetBytePtr(pixelData) let pixelInfo: Int = ((Int(myUIImage.size.width) * Int(pos.y)) + Int(pos.x)) * 4 let r = CGFloat(data[pixelInfo]) / CGFloat(255.0) let g = CGFloat(data[pixelInfo+1]) /…(Continue Reading)

GameplayKitにて、GKComponentを継承したクラス内でentityがnilになる

投稿者: Anonymous いつもお世話になっております。 以下サイトを参考にGameplayKitを勉強しております。 GKComponentを継承したクラス内のentity?.componentの箇所がnilになってしまいます。 自分の力では解決できそうにない為、教えて頂けると幸いです。 ご教授ご鞭撻のほどよろしくお願い致します。 参考サイト https://github.com/marielin/CocoaBlast/blob/master/CocoaBlast_guide.md 参考コード class PlayerControlComponent: GKComponent { /// A convenience property for the entity’s sprite component. var spriteComponent: SpriteComponent? { return entity?.component(ofType: SpriteComponent.self) } … 自己解決致しましたので、回答にソースコードを記載せて頂きました。 解決 簡易なソースコードで試したところ意図した動作で動いていることを確認しました。 そのコードを記載致します。 いろいろアドバイス頂きありがとうございます。 class GameScene { init() { } required init?(coder aDecoder: NSCoder) { fatalError(“init(coder:) has not been implemented”) } func…(Continue Reading)

macOSアプリでのNSDatePickerの表示を[月/日/時/分]形式にしたい

投稿者: Anonymous 画像のように設定したのですが、年/月/日/時/分になっており、年が表示されてしまいます。 これを年を無くし[月/日/時/分]表示にするにはどうしたら良いのでしょうか? Elementsでは対処することができずわかりません、よろしくお願いいたします。 解決 Storyboardエディターで表示されるElementsの項目は、NSDatePickerのこちらのプロパティに対応するようです。 datePickerElements A bitmask that indicates which visual elements of the date picker are currently shown, and which won’t be usable because they are hidden. Discussion See “Constants” in NSDatePickerCell for a description of the possible values. リンク先を辿ると、使用可能な定数の一覧が出てきます。 NSDatePickerElementFlags Constants static var hourMinuteDatePickerElementFlag: NSDatePickerElementFlags Display and allow editing of…(Continue Reading)

SwiftでviewDidLoadの呼ばれるタイミング

投稿者: Anonymous 以下のようにメソッド外でクラスをインスタンス化しておきます。 var firstCtrl = firstViewController() その後以下のif文で箇所でfirstViewController()クラスのviewDidLoadが呼ばれました。 for subv in self.mainContainer.subviews { if subv == self.firstCtrl.view { subv.removeFromSuperview() } } インスタンス化してからこの箇所で初めてfirstCtrlを使い、viewDidLoadが呼ばれたのでSwiftではインスタンス化してから初めて使う場合はviewDidLoadが呼ばれるようになったのかと思ったのですがどうなのでしょうか? Objective-Cでも試してみましたが呼ばれず、他の言語では一般的な動きだったりするという情報を見たのでそうなのかと思いました。 解決 まず大前提ですが、viewDidLoad()が呼ばれるタイミングは言語によって変化することはありません。このメソッドはSwiftやObjective-Cなどの言語機能の一部として呼ばれるのではなく、iOSのViewControllerのライフサイクル管理の一部として呼ばれます。内部的にはviewDidLoadと言うセレクタで表されるメソッドを呼び出しているだけです。 Objective-Cでも試してみましたが呼ばれずとありますが、こちらで同じ動作をするコードをObjective-Cで記述してみましたが、viewDidLoadが呼ばれるのは確認できました。おそらくあなたが試されたコードはSwift版と全く同じ動作にはなっていなかっただけだろうと思います。 で、実際にviewDidLoad()がいつ呼ばれるのかについては、Appleの公式リファレンス等を参考にしてください。 viewDidLoad() This method is called after the view controller has loaded its view hierarchy into memory. This method is called regardless of whether the view hierarchy was loaded…(Continue Reading)

配列をあいうえおABC順にしたい

投稿者: Anonymous ミュージックアプリを作っており、 MPMediaQueryから「アーティスト」や「曲タイトル」を取り出して配列にいれ、テーブルビューで表示させているのですが、 「あ行」のセクション、「か行」のセクションなどに分けて右に表示するインデックスも使えるようにしたいと思うのです(標準のmusic.appのように) ↓こんな感じです      そこで、ABCはまだしも、日本語となると、「ひらがな」「カタカナ」「漢字」「アルファベット」が混在しており、 iTunesの「情報を見る」>「読みがな」(windowsなら「プロパティ」) で設定した「読み」に準規してそれぞれのセクションに別れてほしいと思っています。      ですが、たとえばMPMediaQuery.artists()で取り出したコレクションの中のrepresentativeItemのプロパティの中にはiTunesで設定した「読みがな」の情報がなく、アーティスト名をString型の配列に、あいうえお〜ABC順というMPMediaQueryに渡された順序に則って入れることはできるのですが、 その配列の「あ行」がどこまでで「か行」がどこからなのか等を設定できません。      日本人アーティストの場合、 「あかいゆみこ」、「アナガワヨシユキ」などはもちろん「あ行」ですし、 「安室奈美恵」も「あ行」ですし、「Acid Black Cherry」も「あ行」です。 ただのString型の配列に入れてから、「あ行」「か行」と分けるよりも、 MPMediaQueryから配列を作る段階で「あ行」「か行」と分けたほうがいいと思うのですが、 「読みがな」が引き出せない以上、どうすることもできません。      サード製ミュージックアプリ等ではわりと簡単に実現しているので、 やり方があると思うのですが・・・ 環境はxcode8 swift3 (こちらの質問は何度かterratailでもさせていただけなったので、こちらでも質問させていただいております) 解決 MPMediaQueryには var collectionSections: [MPMediaQuerySection]? というプロパティがあります。 これを使うことで標準のミュージックアプリと同等の読み順インデックスの表示やセクション分けを行うことができます。 質問サイトで尋ねるより先に標準のAPIドキュメントを確認する方が早いですよ。 Xcodeならコード上のクラス名をOptionキーを押しながらクリックし、末尾の Class Referense のリンクをクリックするだけで開けます。 補足説明(追記) MPMediaQueryのcollectionSectionsプロパティで取得できるセクション情報のrangeは、同じMPMediaQueryのcollectionsプロパティで得られる配列の並びに対応しています。 UITableViewに表示する場合、UITableViewDataSourceの各メソッドでほぼそのまま使うことができます。 override func numberOfSections(in tableView: UITableView) -> Int {…(Continue Reading)

複数のエンドポイントから取得したJSONの配列を1つのテーブルビューに表示したい

投稿者: Anonymous 現在Swift 3でRSSリーダーを開発をしているのですが、一つのURLからの表示ができたのですが複数のURLで表示させようとするとその配列の中の一つしか表示されません。 JSON変換はGoogleのAPIを使っています。 コードはこちらです。 class MatomeVieController: UIViewController , UITableViewDelegate, UITableViewDataSource { var NewDataArray = NSArray() var myTableView : UITableView! var matomeURL = “http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&q=表示させたいURL&num=100” var URLstring : [String] = [ “http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&q=表示させたいUR&num=100”, “http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&q=表示させたいUR&num=100”, “http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&q=表示させたいUR&num=100” ] var isLoading : Bool = false override func viewDidLoad() { super.viewDidLoad() … GetURLSRSS() … } func GetURLSRSS() { for URLstrings…(Continue Reading)

Labelの表示・非表示

投稿者: Anonymous swift3で、配列の要素の有無でラベルの表示・非表示を切替えたいのですが、うまくいきません。 下記のコードだと、(q9Labelの配列要素は有りで、q10Labelは無し)テキスト表示はq9Label有り、q10Label無しで表示され合っているのですが、ラベル自体(backgroundColor有り)が非表示になりません。 訂正箇所、その他の方法などがありましたら教えて頂きたいのですが、宜しくお願い致します。   let q9Label = UILabel() let q10Label = UILabel() override func viewDidLoad() { super.viewDidLoad() q9Label.text = dArray[21] q9Label.frame = CGRect(x: 20, y: 470, width: 335, height: 30) q9Label.textColor = UIColor.black q9Label.backgroundColor = UIColor.lightGray if q9Label.text != nil { view.addSubview(q9Label) } q10Label.text = dArray[23] q10Label.frame = CGRect(x: 20, y: 500, width:…(Continue Reading)

Swift3.0におけるjsonパースについて

投稿者: Anonymous Swift2.2からSwift3.0にソースコードの移行を取り組んでいます。 JSONデータを取得して表示するアプリを作成しています。 for item in items as! NSArray { 上記の該当ソースコードでフィールドitemが複数要素となっていましてその複数要素を定数itemsとしてNSArrayにキャストして1要素を定数itemに取り出しています。以前のSwift2.2では正しく動作していたのですが、Swift3.0ではNSArrayにキャストがうまく動作せずに修正方法に苦慮しております。 アドバイスをいただけないでしょうか? [Swift3.0に変換したソースコード] var okashiList :[(maker:String, name:String, link:String, image:String)] = [] func searchOkashi(keyword : String){ let keyword_encode = keyword.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)! let session = URLSession(configuration: URLSessionConfiguration.default, delegate:nil, delegateQueue:OperationQueue.main) let task = session.dataTask(with: URLRequest(url: Foundation.URL(string: “http://www.sysbird.jp/toriko/api/?apikey=guest&format=json&keyword=(keyword_encode)&max=10&order=r”)!), completionHandler: { (data, response, error) in do { let json…(Continue Reading)

Swift3でSJISを使ったURLエンコードをしたい

投稿者: Anonymous Swift3にて、Shift-JISでURLをエンコードする必要が出てきたのですが、 String.addingPercentEscapesが非推奨になっており、代わりにString.addingPercentEncodingを使用するように警告が出てしまいました。 いろいろ調べてみたのですが、String.addingPercentEscapesを使用せずにShift-JISでURLエンコードを行う方法が分からなかったため、ご教授いただきたいです。 解決 本来なら、アプリ側をSJISに対応させるのではなく、サーバー側をUTF-8に対応させるのが筋だと思うのですが…。 AppleがSJIS対応のURLエンコード機能をiOSやSwiftの標準ライブラリーに再度付け加える可能性は極めて低いでしょうから、全部自前で処理してやる必要があります。 例えばこんな感じになるでしょう。 extension CharacterSet { static let rfc3986Unreserved = CharacterSet(charactersIn: “ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~”) } extension String.Encoding { static let windows31j = String.Encoding(rawValue: CFStringConvertEncodingToNSStringEncoding(CFStringEncoding(CFStringEncodings.dosJapanese.rawValue))) } extension String { func addingPercentEncoding(withAllowedCharacters characterSet: CharacterSet, using encoding: String.Encoding) -> String { let stringData = self.data(using: encoding, allowLossyConversion: true) ?? Data() let percentEscaped = stringData.map…(Continue Reading)

アプリ制作”ボタンを押した後にswitch文を通る前の状態に戻したい。”

投稿者: Anonymous swift初心者です。 xcode(言語:swift3)で、ボタンを押すと5種類の音声(「1.mp3」「2.mp3」「3.mp3」「4.mp3」「5.mp3」)がランダムに鳴るアプリを作ろうと考えております。 自分なりに調べて書いて見たのですがシミュレーションを開始すると、何度もボタンを押してもずっと同じ音声が流れ続け、一度アプリを終了しないと他の音声にはなりません。アプリを再起動させると、他の音声も再生されます。 毎回アプリを再起動せずに、ボタンを押すたびに、別の音声がランダムに流れるようにしたいのですが、どこをどのように直せばよいでしょうか。ボタンがタップされた後にswitch文を通る前の状態に戻すことができればいいような気がするんですが、調べてみてもわかりませんでした。 こちらに自分で書いたものを添付いたします。 よろしくお願いいたします。 import UIKit import AVFoundation class ViewController: UIViewController, AVAudioPlayerDelegate { var audioPlayer:AVAudioPlayer! @IBOutlet var button:UIButton! override func viewDidLoad() { super.viewDidLoad() // 再生する audio ファイルのパスを取得 let audioPath1 = Bundle.main.path(forResource: “1”, ofType:”mp3″)! let audioUrl1 = URL(fileURLWithPath: audioPath1) let audioPath2 = Bundle.main.path(forResource: “2”, ofType:”mp3″)! let audioUrl2 = URL(fileURLWithPath: audioPath2) let audioPath3…(Continue Reading)

タイマーが1秒ごとに動かない(一度に2回呼ばれてしまう)

投稿者: Anonymous 画面遷移先(ここではEditPopUpViewController)でユーザーが時間を設定し、遷移元のタイマーにそれを反映させ、タイマーを機能させようとしています。 具体的な流れは、 ①editTaskボタン(identifier: “goEditPopUp”)を押して、画面遷移 ②遷移先にあるwheelTimerOutlet(UIDatePickerのcountDownTimer)を使って時間を設定し、doneOutletボタンを押して遷移元に戻る ③その設定された時間を遷移元に反映させて、タイマースタート。taskContentラベルに残り時間を毎秒表示 (④stopボタンでタイマー停止) です。 しかし、これをランすると、taskContentラベルにあるタイマーの残り時間が2秒ずつ減ってしまいます。そして、stopボタンを押すと1秒ごとに減るようになります。原因は最初の段階でタイマーが二度呼ばれてしまっていることにあるようです。 どうしたら解決できるでしょうか。 以下コードです。簡単のため本件に関係ないと判断した機能は省略させていだだきました。分かりにくいところがあればコメントにてお知らせ下さい。なるべくすぐに対応します。 import UIKit class FirstViewController: UIViewController{ override func viewDidLoad() { super.viewDidLoad() stop.addTarget(self, action: #selector(stopTimer), for: .touchUpInside) //・・・ } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } //・・・ @IBOutlet weak var taskContent: UILabel! @IBOutlet weak var editTask:…(Continue Reading)

文字列に指定のワードが何個含まれるかカウントしたい

投稿者: Anonymous 文字列のなかに指定のワードがいくつ含まれるか数えたい。 例:「林檎を食べた。林檎は美味しかった。林檎が大好き」 上の文字列を「林檎」で検索したとき、3と返ってくる方法。 現在はこのメソッドを使って検索していますが、これだと有る/無ししか分からず、ワードの数までは把握できません。 if str.lowercaseString.containsString(“林檎”) { // -> true } 解決 残念ながら、そう言ったこと専用のメソッドはSwiftの標準ライブラリにも、String型のFoundation拡張の中にも見つかりません。 自分でカウントする方法 let str = “林檎を食べた。林檎は美味しかった。林檎が大好き” let word = “林檎” var count = 0 var nextRange = str.startIndex..<str.endIndex //最初は文字列全体から探す while let range = str.range(of: word, options: .caseInsensitive, range: nextRange) { //.caseInsensitiveで探す方が、lowercaseStringを作ってから探すより普通は早い count += 1 nextRange = range.upperBound..<str.endIndex //見つけた単語の次(range.upperBound)から元の文字列の最後までの範囲で次を探す } print(count) //->3…(Continue Reading)

if文、switch文でas演算子の使い方が変わる?

投稿者: Anonymous class BaseClass{} class AClass : BaseClass{} class BClass : BaseClass{} //var b : BaseClass = AClass() var b : BaseClass = BClass() if let p = b as? AClass{ print(“OK:(type(of:p))”) }else{ print(“else”) } switch b{ case let p as AClass: print(“OK:(type(of:p))”) default: print(“default”) break } if文では、as? switch文では、asと記述しますが、何かしっくりきません。 それでいて、if文のpは、Optional型とはならない。 if文も asでもいいのではと思ってしまいます。 たいてい、そこには理由があるのですが、ご指摘お願いします。 解決 if文とswitch文の違いというよりはオプショナルバインディングとパターンマッチングの違いと言った方が良いでしょう。…(Continue Reading)

swift3.0 MPVolumeViewで作ったボリュームスライダー右側の黄色点滅を解除したい

投稿者: Anonymous MPVolumeViewで作ったボリュームスライダーを右側へゆっくりスライドしていくと、スライドバーが黄色く点滅し、ボリューム位置が少し左へ移動します。 再度右側へスライドすると点滅は解除され右端まで移動することができます。 なぜ黄色く点滅するのかわかりません。 原因と解決方法を教えていただけないでしょうか? よろしくお願いします。 import UIKit import MediaPlayer class ViewController: UIViewController { var mpVolumeSlider = UISlider() var volumeParentView = UIView() override func viewDidLoad() { super.viewDidLoad() volumeParentView.backgroundColor = UIColor.clear let volumeView = MPVolumeView(frame: CGRect(x: 10, y: 300, width: 300, height: 50)) for view in volumeView.subviews { let uiview: UIView = view as UIView…(Continue Reading)

Pasar información de un UIViewController a otro documento

publicado por: Anonymous Me gustaría saber cual es la manera más eficiente de pasar información de un archivo Swift a otro por ejemplo de un ViewController a el modelo de datos o a otro View que nos interese, gracias de antemano. UIViewController1 Aqui un primer archivo func prueba() -> String{ return “ejemplo”} Con esta función…(Continue Reading)

FirebaseのGoogleログイン時に使うデリゲートGIDSignInDelegateのエラー

投稿者: Anonymous import UIKit import Firebase import FirebaseAuth import GoogleSignIn class LoginViewController: UIViewController, UITextFieldDelegate,GIDSignInDelegate, GIDSignInUIDelegate { @IBOutlet var mailField: UITextField! @IBOutlet var passwdField: UITextField! @IBOutlet weak var googleSignIn: GIDSignInButton! override func viewDidLoad() { super.viewDidLoad() mailField.delegate = self passwdField.delegate = self GIDSignIn.sharedInstance().clientID = FIRApp.defaultApp()?.options.clientID GIDSignIn.sharedInstance().delegate = self GIDSignIn.sharedInstance().uiDelegate = self } @IBAction func googleSignInClicked(sender: AnyObject) {…(Continue Reading)

swift3に移行時のOutputStreamでのバグを直したい

投稿者: Anonymous 初心者ですみません。 今playground上で動くプログラムをswift2.1からswift3に書き換えていて、プログラムの指示通りに直していたのですが、 あるテキストボックスを作り、上書き保存する場面でエラーが出ました。 import Cocoa var Mill1 = “a8 ~ a16” let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as String let fileObject = Mill1 let fileName = “Mill crepe1.txt” let filePath = documentsPath + fileName do { try fileObject.write(toFile: filePath, atomically: true, encoding: String.Encoding.utf8) } catch { } let output = OutputStream(toFileAtPath: filePath, append:…(Continue Reading)

CGContext で bitmap を作成し、 UIImage を描画してbitmap のビットの値を出力したい

投稿者: Anonymous https://stackoverflow.com/questions/448125/how-to-get-pixel-data-from-a-uiimage-cocoa-touch-or-cgimage-core-graphics/1262893#1262893 上記タイトルの通りです。本家のstackoverflowの記事について興味がありこのような方法で 色情報を抜き出すにはどのようにコードを書くのが良いでしょうか。 宜しくお願い致します。 解決 ほとんどが掲載していただいたリンク先のコードをSwift 3に置き換えただけなのですが、以下のような感じになります。関連質問のコードとも見比べながらご覧いただければと思います。 class BitmapBuffer { private var pixelData: Data let width: Int let height: Int private let bytesPerRow: Int private let bytesPerPixel = 4 init?(uiImage: UIImage) { guard //CGImageが取得できること let cgImage = uiImage.cgImage else {return nil} //自分が望む形式でCGContextを作成する width = cgImage.width height = cgImage.height let colorSpace = cgImage.colorSpace! bytesPerRow…(Continue Reading)

Timerを利用したバックグラウンドでの位置情報の取得

投稿者: Anonymous 【Tips】iOSで位置情報を取得する方法(Swift 3.0対応) http://blog.koogawa.com/entry/2016/03/26/181906 バックグラウンドでの定期的な処理について https://ja.stackoverflow.com/a/8513/18443 上記2サイトの処理をくっつけて「Timerを利用して、バックグラウンドでも位置情報を1秒ごとにprint出力するアプリ」をつくりたいのですが、アプリをバックグラウンドにすると、5秒ほどしてからprint出力がストップしてしまいます。 どこでミスが生じているのか、教えてください。 import UIKit import CoreLocation class ViewController: UIViewController, CLLocationManagerDelegate { @IBOutlet weak var latTextField: UITextField! @IBOutlet weak var lngTextField: UITextField! var locationManager: CLLocationManager! var backgroundTaskIdentifier: UIBackgroundTaskIdentifier? override func viewDidLoad() { super.viewDidLoad() if CLLocationManager.locationServicesEnabled() { locationManager = CLLocationManager() locationManager.delegate = self backgroundTaskIdentifier = UIApplication.shared.beginBackgroundTask(expirationHandler: { UIApplication.shared.endBackgroundTask(self.backgroundTaskIdentifier!) }) var…(Continue Reading)

Swift3/Xcode8でCoreDataに保存したデータを特定データのみTableViewに表示する方法

投稿者: Anonymous Swift初心者です。 現在、iOSアプリ作成の練習として家計簿アプリを作成しています。 これまで、 CoreDataに「年月日、カテゴリ(食費など)、費用」を保存。 保存したデータをTableViewに表示。 データを追加したらfetchedResultsControllerを用いてリアルタイムでTableViewに反映。 TableViewのセルをタップするとその出費データの修正ができる(それもリアルタイムで反映)。 というところまで実装することができました。 しかし、指定された月の出費データのみをTableViewに表示する方法がわかりません。 CoreDataに保存されている出費データすべてをTableViewに表示してしまいます。 ようするに、今月のデータのみをCoreDataから持ってきてTableViewに表示する、先月のデータのみを見たいときは、何らかの方法で画面を切り替えて先月のデータのみで構成されたTableViewを表示する、などということができません。 TableViewに特定の月のデータだけを表示する方法はありませんか? (現在モデルとエンティティを1つずつ使用していますが、複数のモデルまたはエンティティを用意するべきでしょうか? その場合はどのようにしてモデル・エンティティを切り替えればいいでしょうか? それとも、CoreDataに保存されているデータのうち、特定のデータのみを選択してTableViewに表示する方法はありますか?) 試したこと モデルを月ごとに用意し、TableViewごとにモデルを切り替えれば良いのでは、と思い試してみましたが、「Spending」というエンティティを共通にしたため、Spendingというクラスは曖昧だからダメと言われました。かといってエンティティを別名にすると、fetchedResultsControllerを作成するコードを複数用意しないといけないと思うので、スマートではないかな、と思いました(まだ試していません)。 表示したい月以外のデータを表示するセルは非表示にすればいいと思い、TableViewのデータソースでそれを試しましたが、非表示にしたデータの部分が真っ白になるだけで、セルごと消えてくれませんでした。 以下に、「ViewController.swift」のコードを記載しておきますので、何卒よろしくお願いします。     コードとその軽い解説 CoreDataのモデルは「Spendings.xcdatamodeld」というモデルで、「Spending」というエンティティが「year」「month」「day」「category」「cost」という属性を持っています。 年月日とカテゴリはそれぞれPickerViewで選択し、それらをそのDelegateでmyDate[]やmyCategoryという変数に代入しています。 そして、それらのデータをCoreDataへ保存しています。 それらのデータ追加処理は「AddSpendingViewController.swift」という別ファイルで書いていますが、そちらはTalbeViewと関係がなさそうなので記載していません(そちらも見てみないと何とも言えないようでしたら、追記します)。 他に必要なコードがありましたら記載しますので、よろしくお願いします。 import UIKit import CoreData class ViewController: UIViewController { // MARK: – Properties private let segueAddSpendingViewController = “SegueAddSpendingViewController” private let segueEditSpendingViewController = “SegueEditSpendingViewController” // MARK: – @IBOutlet weak var…(Continue Reading)

Swift TableViewの最初のCell表示の位置がおかしい(初期位置が中央になる)

投稿者: Anonymous 下図のように、最初のCellの表示位置がTableの縦方向真ん中から表示されてしまいます。 このテーブルに対するコードは以下のコードだけです。 TableViewはStoryboardにおいているだけです。 特にTableViewCellは作成していません。 改善方法を教えていただけると幸いです。 よろしくお願いいたします。 @IBOutlet weak var tblHistory: UITableView! let cellID = “historyCell” //テーブルのデータ総数を返す func tableView(_ tableView: UITableView ,numberOfRowsInSection section: Int) -> Int{ return workContainer.Days.count } //指定した行を返す func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{ let cell = UITableViewCell(style: UITableViewCellStyle.value1, reuseIdentifier: cellID) let row:Int = indexPath.row cell.textLabel?.text = DateTimeConv.stringFromDate(date: workContainer.Days[row].Day…(Continue Reading)

TableView内のセルにTextFieldを配置し値を取得・表示させたい

投稿者: Anonymous TableView内のセルにTextFieldを配置し、パスワード変更画面のような画面を作成したいのですが、初心者のためうまく作成することができません。 記載したソースコードは下記のとおりですが、シュミレータで起動するとうまく動作しません。 下記の画像のとおり、各セルを選択した際に表示が意図しない動きとなってしまします。 期待する動作としては、各セルを選択した際に、TextFieldがフォーカス状態となる状態を期待しております。 ChangePasswordViewController.swift class ChangePasswordViewController: UIViewController,UITableViewDelegate, UITableViewDataSource { //データ var dataInSection = [[“現在のパスワード”],[“新しいパスワード”,”パスワードを確認”]] //セクション var sectionIndex:[String] = [“”,””] //データを返す func tableView(_ tableView:UITableView, cellForRowAt indexPath:IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: “PasswordCell”, for:indexPath as IndexPath) as! ChangePasswordTableViewCell var section = dataInSection[indexPath.section] cell.textLabel?.text = section[indexPath.row] return cell } //データの個数を返す func tableView(_ tableView:UITableView,…(Continue Reading)

Laravel5.3でiOSなどのモバイル用のAPIを作成する方法

投稿者: Anonymous 目的: Laravel5.3で作成したAPIをiOSから用いたい Laravel5.3にPassportを導入し、iOSからaccess_tokenを取得することはできました。 以下はその例です。 let authUrl = URL(string: “http://laravel.dev/oauth/token”)! let authBody = NSMutableDictionary() var request = URLRequest(url: authUrl) authBody.setValue(“2”, forKey: “client_id”) authBody.setValue(“*******”, forKey: “client_secret”) authBody.setValue(“[email protected]”, forKey: “username”) authBody.setValue(“*******”, forKey: “password”) authBody.setValue(“password”, forKey: “grant_type”) authBody.setValue(“”, forKey: “scope”) request.httpMethod = “POST” request.addValue(“application/json”, forHTTPHeaderField: “Content-Type”) request.addValue(“application/json”, forHTTPHeaderField: “Accept”) request.httpBody = try JSONSerialization.data(withJSONObject: authBody, options: JSONSerialization.WritingOptions.prettyPrinted) URLSession.dataTask(with:…(Continue Reading)

UITextView内のカーソル位置に文字を追加

投稿者: Anonymous 環境 swift3 Xcode9.0.1 実現したいこと UIButtonを押すと、UITextView内のカーソル位置に文字を挿入するためにはどのようにしたら良いでしょうか。 例 UITextViewの内容が あいうえおさしすせそ とあり、’お’ と ‘さ’ の間にカーソルがある時 ボタンを押すと あいうえおかきくけこさしすせそ となるようにしたいです。 解決 下記のようにinsertText(_:)メソッドを使います。 textView.insertText(“かきくけこ”) 回答者: Anonymous

swift2.3からswift3.1へのコンバート

投稿者: Anonymous Xcode 8.3.3で以下のソースを変換してbuildしたところエラーが発生しました。 open func drChar(fieldNo : Int32, row : Int32, column : Int32, strBuf : [UInt8]?, useDirectChg : Int32) -> Int32 { var retValue : Int32 = 0 if strBuf == nil { retValue = drChar(fieldNo, row, column, nil, useDirectChg) } else { retValue = drChar(fieldNo, row, column, UnsafeMutablePointer<Int8>(strBuf!), useDirectChg) } return retValue…(Continue Reading)

Xcodeを使っていますが、良いメソッドの分類方法を知りたいです。

投稿者: Anonymous //MARK: – としてナビゲーターのリストに表示されるメソッド名を プログラム全体の見通しがよくなったり、可読性が増したり、 開発効率が上がるような分類方法を知りたいのですが、 一般的に知られた方法や、優れた方法はあるのでしょうか? ・大分類>中分類>小分類   みたいな分類方法はないですか? ・あるいは、そのあたりの指針を示した資料などありますか? ・今のところなんとなく、下のように関係のあるものをまとめているだけです。 //MARK: – フェッチ //MARK: – Common //MARK: – ScrollView //MARK: – CollectionView //MARK: – TableView //MARK: – 新しいアイテムをつくる //MARK: – Item 操作 解決 僕の場合は、Objective-Cなので、//MARK:- を使わずに、#pragma markでコードの区分けをしていますが、 こんな感じですね。基本はクラスの中でどんな役割を持っているか?をMARK:-で、そのなかでのまとまりをMARK:で区切って見出しを付けていくと良いと思っています #pragma mark – synthesize properties #pragma mark – class method #pragma mark – constructor / destructor…(Continue Reading)