Swift2.0 、Facebookと他のアプリと連動(ランキングについて)

投稿者: Anonymous 今現在得点を競うゲームを開発中なのですが、ランキング機能を実装したいと思っています。 他のアプリで良く見かていて、実装したいのが、「Facebookに連動して友達と点数を競いランキングで表示」です。 点数を比較してランキング表示をするというのは公式等ににサンプルはあるのでしょうか? それとも全て自作で考える必要があるのでしょうか? 回答よろしくお願いします。 解決 『公式』と言うのが何を指しているのかよくわかりませんが、少なくとも、Appleが用意しているサンプルコードの中には、言われるようなものは無いと思います。 ParseやNifty Cloud Mobile Backendなどの、Facebookと連携するところまでやってくれるmBaaSを使って、実装するのが良いのでは無いでしょうか? (Parseはもうすぐ終了しますが・・・) Facebookと連携する部分を自力でやるのであれば、Game Kitの機能にあるGKLeaderboardsを使うのが楽かと思われます。 回答者: Anonymous

NSCocoaErrorDomain Code=3840 について

投稿者: Anonymous func sampleGET() { Alamofire.request(.GET, “http://sample.jp/api/post/[$id]/test”, headers: header) .responseJSON { response in print(response) guard let object = response.result.value else { self.showAlert(“Cocoaエラー”) return } } } こちらのコードで[$id]に数字を入れたURLから情報をGETしようとすると Error Domain=NSCocoaErrorDomain Code=3840 “Invalid value around character 0.” UserInfo={NSDebugDescription=Invalid value around character 0.} のCocoaエラーが出てしまいます。 3840はポストの際に渡している引数の不足など、とどこかで見たのですが 今回はGETなのでいまいちわかりません。 原因としては何が考えられるでしょうか。 解決 func sampleGET() { Alamofire.request(.GET, “http://sample.jp/api/post/[$id]/test”, headers: header) .responseString { response…(Continue Reading)

NSData型への変換について

投稿者: Anonymous func Sample() { let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) let publicKeyPath = paths[0].stringByAppendingPathComponent(“public.pem”) let privateKeyPath = paths[0].stringByAppendingPathComponent(“private.pem”) let keyPair: (publicKey: SecKey?, privateKey: SecKey?) = generateKeyPair() do { let publicData = try NSData(contentsOfFile: publicKeyPath, options: .DataReadingMappedIfSafe) let keyDef = NSUserDefaults.standardUserDefaults() keyDef.setObject(publicData, forKey: “pubKeyData”) var pubKeyString = NSString(data: publicData, encoding: NSUTF8StringEncoding) print(pubKeyString!) let UserId =…(Continue Reading)

Alamofireでの処理について

投稿者: Anonymous Alamofire自体が非同期通信というのは存じております。 Alamofireを利用してデータをPOSTしたいと考えているのですが、 「A」「B」「C」という3つの処理があり、 ①「A」が正常に終わると「B」に移行する ②「B」を正常に処理し終えると「C」に移行する。 ③「B」で受け取ったデータを元にデータを処理し、「C」の処理で送信し処理を終える。 要するに「A」が終わってから「B」 「B」が終わってから「C」の順番で処理を行うことは可能でしょうか。 「A」「B」「C」それぞれがAlamofireでの処理になります。 例)「A」-> アカウント登録   「B」-> ログイン要求   「C」-> ログイン処理のためのハッシュ送信 一つずつキューを使って処理すべきなのでしょうか。 解決 非同期処理をうまく使いこなすコツは「待たない」こと、完了後のデータが必要な処理は完了ハンドラの中に書くことの2点です。 ただ、コメントに示したように「普通に入れ子にする」と、どうひいき目に見ても見やすいとは思えないコードになってしまいます。 Alamofire.request(.POST, urlA, headers: headersA, encoding: .JSON) .responseJSON { response in //…Aのレスポンスに対する処理 let urlB = … let headersB: [String: String] = … Alamofire.request(.POST, urlB, headers: headersB, encoding: .JSON) .responseJSON { response in //…Bのレスポンスに対する処理 let urlC…(Continue Reading)

swift アプリのタスクを切った後、続きから再開する方法を教えてください。

投稿者: Anonymous 今自分が考えているのはゲームでステージ1−1、1−2・・・と沢山あって1−1をクリアすると1−2が解放されるといったよくあるシステムです。 1−1をクリアして1−2を解放した後アプリのタスクを切ると初期化されてしまいまた1−1からスタートしてしまいます。 どのようにしたらタスクを切ったところから始めることができますか? サーバーなどを使わないとできませんか? もし、使わなくて済むならその方法を教えてください。 コードを簡単に書いていただけると助かります。 説明が下手で申し訳有りません。 ご回答宜しくお願いします 解決 サーバー上でユーザのクリア進捗状況を保持しないのであれば、端末内部に保存する方法を取ることができます。 ステージ数のみ保存する形で良いのであれば、 NSUserDefaultsが手軽に使えて良いのではないかなと思います。 【ソースコード例】 ユーザが 1-2 までステージをクリアしている場合 仮で、1をmajorStageNumber, 2をminorStageNumberとします。 // 値の保存方法 let defaults = NSUserDefaults.standardUserDefaults() defaults.setInteger(1, forKey: “majorStageNumber”) defaults.setInteger(2, forKey: “minorStageNumber”) defaults.synchronize() // 値の取得方法 let majorStageNumber = defaults.integerForKey(“major”) let minor:Int = defaults.integerForKey(“minorStageNumber”) 上記の書き方を踏まえて、 ステージをクリアするごとにステージ数を端末内部に保存する アプリを起動する度に、端末内部からクリアしたステージ数を取得する ようにしてみたらいかがでしょうか? もし、 ステージごとのクリア点数(経験値)やコインも保存したい 1つの端末で複数ユーザでゲームをプレイしたい 3ゲームまでセーブできるといった機能をつけたいといった場合ですかね。 などの想定があるのであれば、Realmを使った方が良いと思います。 Realmについて、参考までに公式サイトのリンクをはっておきます。 少しでも参考になれば幸いです。 回答者:…(Continue Reading)

配列の要素にtagの値を設定するにはどのようにすべきでしょうか

投稿者: Anonymous プログラミング初心者です。 現在スタンプカメラアプリを作成中です。 CollectionViewと配列に関しまして、質問させて頂きます。 質問内容は下記のとおりです。 質問:配列の要素にtagの値を設定するには、どのようなコーディングをすべきでしょうか。 CollectionViewと配列を用いて画像を20個ならべて、1つの画像をタップしたらCollectionViewが閉じ、画像を指定した座標に設置するという仕様を考えております。 この場合、各画像にtagの値と座標の値をあたえるといいのではと思っております。 配列のコードは下記のとおりです。 override func viewDidLoad() { super.viewDidLoad() for i in 1…20 { imageArray.append(UIImage(named: “(i).png”)!) } } 最初はstoryboardで各画像にtagの値をあたえようと思いましたが、配列を用いているため storyboardでtagの値をあたえることができないと思いました。 storyboardのコレクションビューの様子は下記のとおりです。 20個の画像にtagの値をあたえるにはどのようなコーディングをすべきでしょうか。 また、storyboardで配列使用時20個の画像にtagの値をあたえる方法などありますでしょうか。 お手数をおかけいたしますが、ご教示願います。 解決 テーブルビューやコレクションビューを使用する場合は、通常そのようなtagを必要としない。これらのコレクションビュークラスはセルをNSIndexPathで指し示すので、これをそのままtagの代わりにする。 例えばセルを選択した場合にデリゲートで呼ばれるメソッド、 collectionView(_:didSelectItemAtIndexPath:) においても選択されたセルのindexPathが渡される。特に複雑なことをせず画像ファイルの名前に含む識別番号を0始まりにしていればindexPath.rowの値がその識別番号に対応する。 座標は必要になってから都度動的に計算するとよい。 回答者: Anonymous

realmのデータファイルをdropboxにバックアップし、復元する方法について

投稿者: Anonymous swiftで日記アプリを作っています。 実現したいことは、ローカルデータベースrealmのデータファイル(default.realm)をdropboxにバックアップし、復元することです。 そこで、日記の登録、修正、削除があったタイミングでdefault.realmをdropboxにアップロード(上書き)し、常に最新のdefault.realmに更新するところまでは実装しました。 復元の方は、アプリを再ダウンロードし、再びドロップボックスにログインしたタイミングで、バックアップしておいたdefault.realmをDocumentDirectoryのdefault.realmに上書きするという方法を考えています。 しかしこの方法だと、再ダウンロードしてからドロップボックスにログインするまでに、日記の登録があった場合に、その分のデータが消えてしまいます。 どのようにすればデータの取りこぼしなくdropboxにバックアップ、復元できるのでしょうか。よろしくお願いします。 解決 未ログイン時に登録されたデータは別に保存しておいて、DropBoxにログインして古いデータを復元した際にマージする、という方法になると思います。 Realmではファイルを分けることは非常に簡単にできます。Realmインスタンスを作る時にRealm.Configurationオブジェクトで別のパスを指定するだけです。 そしてDropBoxに復元したデータに、未ログイン時のデータを1件ずつコピーすれば良いでしょう。 回答者: Anonymous

親子関係ではない、他のViewControllerのインスタンスの値を変更する

投稿者: Anonymous はじめまして。 全く関係のない(親子関係ではない)他のViewControllerの値を変更したいですが、うまく変更させることができません。 ご教授いただけますでしょうか。 【前提】 FirstViewController(FirstVC)にはscrollView上に乗っているteamIcon(UIButton)があり、自身のボタン画像としてrealm内に保存されたデータ(NSData)を取得している。 また自身をタップするとカメラロールを開き、画像を選択後、realmに保存することができる。 一方、SecondViewController(SecondVC)にも、teamIcon(UIImageView)があり、realm内に保存されているデータ(上記、FirstVCで述べているデータと同じもの)を表示している。 【やりたいこと】 FirstVCのteamIcon(UIButton)をタップ、realmに保存後、SecondVCのteamIcon(UIImageView)の画像も、そのタイミングで変更する。 【現状】 FirstVCのteamIcon(UIButton)をタップ後、AppDelegateを通じて、SecondVCのteamIconを変更するための関数の呼び出しは成功している模様(print()が動いていることから推測)。 だが、その関数内の teamIcon.image がうまく効いてくれない。 お手数をおかけしますが、アドバイス頂けると幸いです。 宜しくお願い致します。 FirstVC import UIKit import Photos import AssetsLibrary import RealmSwift class FirstViewController: UIViewController, UIPickerViewDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate { var appDelegate: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate var memberCollectionView : UICollectionView! var memberCollectionRetsu : Int = Int() var memberCollectionHeight : CGFloat…(Continue Reading)

NSNotificationCenter.defaultCenter().postNotificationNameの引数にUINT8型が指定できない

投稿者: Anonymous 下記のようにすると、 「Cannot convert value of type ‘UInt8’ to expected aegument type ‘AnyObject?’」 というエラーが出てしまいます。 let obj:UInt8 = 0  NSNotificationCenter.defaultCenter().postNotificationName(“test”, object: obj, userInfo: nil)   class TestObj { var test:UInt8=0 } ~~~ let obj = TestObj() obj.test = 1 NSNotificationCenter.defaultCenter().postNotificationName(“test”, object: obj, userInfo: nil) 上記のようにしたことで通知は可能なのですが、 なぜUINT8は直接指定できないのか理解できておらず、この方法が正しいのかがわかりません…。 この方法は回りくどい、こうするのが通常手段…などなどありましたらご意見いただけないでしょうか。 解決 まずUInt8が使用できない理由ですが、エラーメッセージの通りで、「’UInt8’型の値は引数として期待されている’AnyObject?’型には変換できません」です。  AnyObject(またはAnyObject?)に変換可能な数値型は限られていて、こちらに記載があります。(ちなみに他にもあります。) Numbers  要は整数型だとIntとUIntだけがNSNumberに自動的に変換されて、それはAnyObjectとしても取り扱えますよ、ということです。(この自動変換が有効になるのは、(間接的にでも良いので)Foundationをimportしている時だけです。) 試しにUInt8をIntかUIntに変更して、元のコードをコンパイルしてみてください。 次に「こうするのが通常手段」の部分ですが、postNotificationName(_:object:userInfo:)メソッドのリファレンスでは、object引数のことをこう記載しています。 postNotificationName(_:object:userInfo:)…(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)

swift2で「Type ‘クラス名’ does not conform to protocol ‘SKPaymentTransactionObserver’」のエラーが発生

投稿者: Anonymous swift1.2で実装していたアプリを、今回アップデートする事になり、swift2.2で書きなおしています。 その中で、storekitのSKPaymentTransactionObserverを使っているクラスで 「Type ‘クラス名’ does not conform to protocol ‘SKPaymentTransactionObserver’」 のエラーが発生してしまっております。 SKPaymentTransactionObserverのプロトコル paymentQueue(queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) は、実装済みで、optionalのプロトロルは paymentQueue(queue: SKPaymentQueue!, restoreCompletedTransactionsFailedWithError error: NSError!) paymentQueueRestoreCompletedTransactionsFinished(queue: SKPaymentQueue!) が、実装済みでした。 swift1.2の時は、問題なく動いていたのですが、swift2.2でコンパイルが出来なくなってしまい、困っております。 他のoptionalなプロトコルも書いてみたりしたのですが、エラーが解消されませんでした。 何か、エラーの原因がおわかりになる方、いらっしゃいましたらご教授頂けますと幸いでございます。 よろしくお願い致します。 解決 Le Pere d’OOさま。 コメントありがとうございます。 ご指摘頂きましたとおり func paymentQueue(queue: SKPaymentQueue!, removedTransactions transactions: [AnyObject]!) のように、Swift1.2の時の書き方のまま、「実装済み」のつもりになっておりました・・・。 こちら、 paymentQueue(qu‌​eue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) とすることで、事象が解消致しました。 ご指摘ありがとうございました。 回答者: Anonymous

クロージャー内部で生成させたUIImageを、クロージャー外部で使うにはどうしたらいいですか?

投稿者: Anonymous swift及びプログラミング初心者です。 スタンプカメラアプリでカメラロールに保存したUIImageをTwitter投稿させる機能の実装方法で悩んでいます。 撮影ボタンを押すとクロージャー内部で画像を合成させて、最終的にcapturedImage2というUIImageが生成させました。 (カメラロールには画像が保存できています) 以下、クロージャー内部のコードです。 let myAVConnection = myImageOutPut.connectionWithMediaType(AVMediaTypeVideo) myImageOutPut.captureStillImageAsynchronouslyFromConnection(myAVConnection, completionHandler: {(imageDataBuffer, error) -> Void in ・・・・ ・・・・ ・省略・ ・・・・ ・・・・ let capturedImage2: UIImage = UIGraphicsGetImageFromCurrentImageContext() UIImageWriteToSavedPhotosAlbum(capturedImage2, self, nil, nil) UIGraphicsEndImageContext() }) } クロージャ内部で生成したcapturedImage2をtwitterに投稿したいため、Socialフレームワークを用いて以下の様なコードを記述したいと思っています。 @IBAction func postTwitter(sender: AnyObject) { let twVC:SLComposeViewController = SLComposeViewController(forServiceType: SLServiceTypeTwitter)! let sendImage = rarara twVC.addImage(sendImage) self.presentViewController(twVC, animated: true, completion:…(Continue Reading)

TableViewの軽量化

投稿者: Anonymous 現状 Cellの生成の際に毎回AXRatingViewを呼び出し、 レーティングを表示しているためなのか、 上下にスクロールを繰り返しているとメモリ消費量が多くなり動作が重くなってしまいます。 どうしたいのか できるだけ上下させても動作を軽くしたいのですが、 どのように書き換えればよろしいでしょうか、ご教授願います。 Source import UIKit import AXRatingView class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { func tableView(table: UITableView, numberOfRowsInSection section: Int) -> Int { return 10 } func tableView(table: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = table.dequeueReusableCellWithIdentifier(“TableCell”, forIndexPath: indexPath) let label1 = cell.viewWithTag(1) as! UILabel label1.text =…(Continue Reading)

ArraySliceについて詳しく知りたい。

投稿者: Anonymous 日本語の情報が少なく、がんばってリファレンスを読んだのですが、まだ理解できていないので伺います。 リファレンスをざっと読んだ感じだと、 ArraySliceはArray同様に振る舞うとあり、Obj-Cとの互換性がないとありました。 (英語が苦手のため誤った解釈かもしれません、間違っていたらご指摘ください。) そして、ArraySliceは長期的なインスタンスの保管は、推奨されておらず、 一時的な処理にのみ利用すると書いてありました。 でしたら、わざわざArraySliceを用いる必要がないような?と思ったため調べました。 ArraySliceの正体やどのようなときに使用するのかを知りたいです。 そもそもArraySliceって何?となったのは http://tercel-tech.hatenablog.com/entry/2014/08/18/211514 こちらのブログで掲載されている以下のコードを見てのことです public subscript(range: Range<Int>) -> ArraySlice<Book> { get { return books[range] } set { books[range] = newValue } } ブログでは戻り値がSliceだったのですが、Swift2.3ではエラーがでたのでArraySliceに変更になったのかな?と思って書き直しています。 なぜここでArraySliceを使うのかも教えていただければ助かります。 解決 リンク先のコード例は、Swift1.2時代のものなので、根本的にいろいろ変わってしまいました。 CollectionTypeに準拠したクラスを作るというだけであれば以下の記述でいけると思います。(もっとスマートな書き方があるのかもしれません) class BookShelf: CollectionType { private var books:[Book] = [] var startIndex: Int = 0 var endIndex: Int { get{…(Continue Reading)

ボタンをタップするごとに画像が切り替わる機能の実装方法

投稿者: Anonymous プログラミング初心者です。 現在、ボタンをタップするごとに画像が切り替わる機能を考えています。 画像は、「1.png」「2.png」「3.png」「4.png」の4つです。 ボタンをタップすると「1.png」表示が消え「2.png」が表示します。 ボタンを繰り返しタップすると、以下のようにループします。1.png→2.png→3.png→4.png→1.png→2.png→以降もループ また、1〜4.pngの表示される座標はそれぞれ異なります。 各座標は以下の通りです。 1.pngは(x:150, y:150) 2.pngは(x:100, y:360) 3.pngは(x:70, y:500) 4.pngは(x:100, y:200) 以上の様な機能を実装するために考えたコードは、下記のとおりです。 ViewController.swift class ViewController: UIViewController { var imageNum: Int = 0 var stampView:UIImageView! let stampImage = UIImage(named: “1.png”)! 省略 var imageArray:[UIImage] = [] override func viewDidLoad() { super.viewDidLoad() for i in 1…4 { imageArray.append(UIImage(named: “(i).png”)!) } 省略 stampView…(Continue Reading)

Swift 画像をデータベースへ

投稿者: Anonymous Swiftで画像をデータベースへアップすることは可能ですか? My SQLを想定していますがその場合型はなにになりますか?画像 BLOBですか? また OracleとRealmとどっちがいいですか? 解決 Q. 画像データを複数個(任意個)サーバに保存しておくに最適なソリューションは? と読み替えさせてもらいます( swift 関係なし) 短い答え:最適解は要件によって異なります 長い答え: データベースを使う(プログラマにとっての)メリットは 検索が高速なこと 差分管理ができること バックアップ等のツールが充実していること 一方、画像データ自体を保存する目的にデータベースを使ってもデータベースソフトが得意な形での検索する機会がまず絶対にないので、これだけでもうデータベースを使う意味が半減どころか皆無です。画像ファイルを画像ファイルとしてアクセスできる構造のほうが余計なオーバーヘッドがかからなくて処理が高速になり、末端顧客としてはそっちのほうがうれしいかもしれません。 # オイラの知り合いのカメラ好きは 256GB CF を数枚用意して、現地での撮影の際はひたすら撮影、空き時間にノートパソコンに複写して CF は再フォーマット、練習走行から予選決勝までの間に撮影データ量はテラバイトに達して、帰宅してから整理、ってしてます。そういうユーザが100人いれば、一時的であってもサーバ側に要求される記憶装置容量はエクサの桁が必要。 どういうユーザが何人いてどんな使い方するか、の案件分析がないまま仕様選定の話をしているので、まとまるものもまとまらないです。 回答者: Anonymous

Adaptar imagenes en un UIImageView en Swift 2

publicado por: user9099 estoy desdarrollando una app que funciona como lector rss, al leer la información de un xml, obtengo el titulo de la noticia, la fecha, y una imagen, la imagen la obtengo con el siguiente código: var cell:UITableViewCell = UITableViewCell() cell = tableView.dequeueReusableCellWithIdentifier(“BasicCell”)! let imageView: UIImageView? = cell.viewWithTag(2) as! UIImageView? let url:NSURL? =…(Continue Reading)

文字列の復号化で「nil」が返ってきて正常に復号化出来ない

投稿者: Anonymous Alamofire.request(.POST, “http://sample.com/api/login”, parameters: param) .responseJSON { (responce) in guard let object = responce.result.value else { return } let json = JSON(object) let aaa = json[“result”].string! let bbb = aaa.dataUsingEncoding(NSUTF8StringEncoding) let ccc = bbb?.base64EncodedStringWithOptions(.Encoding64CharacterLineLength) let ddd = ccc!.dataUsingEncoding(NSUTF8StringEncoding) let eee = dataTool.decrypt(ddd!) print(ddd) } —–サーバから返ってくる文字列—– Z1h/9XCDaMZQ+JIwQLWkfqfNbHmcRs3dK3ITMCewCr8f15witQB7bX/fnhMFBBOmalQkbioX40Io8GzzL8meo5kkeD9TMePEG6ugvZ7fJ6TMXZ2FVcCXMerlOPbYnpGjHWSL4ayM0cAAYhWlNRooACXfUjkmLoTeeUefVIdZ1P4= public func decrypt(encryptData: NSData) -> NSString? { let…(Continue Reading)

AlamofireImageのキャッシュ機能

投稿者: Anonymous import UIKit import Alamofire import AlamofireImage import SwiftyJSON class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let uiImage = self.view.viewWithTag(1) as! UIImageView uiImage.af_setImageWithURL(NSURL(string: “https://httpbin.org/image/png”)!) } } AlamofireImageを使用する際、上記のようにURLから画像を取得するだけで、 自動でキャッシュは生成されるものなのでしょうか。 TableViewなどで各セルに画像を表示したい場合(キャッシュを生成、利用したい) 上記の処理を含めた処理を実装することで実現できますでしょうか。 解決 AlamofireImageは内部にキャッシュを持っていて、特に何も指定しなければURLごとに自動的にキャッシュが利用されます。ですので、同じURLに対してリクエストする限りは一度画像を取得していれば2度目以降はキャッシュから取得されます。 回答者: Anonymous

iPhoneの写真のうち選択したデータから緯度と経度を取得したい

投稿者: Anonymous iPhoneの写真データから緯度と経度を取得しようとしていますが選択した写真だけでなく表示されている写真全てから緯度と経度のデータが取得されてしまいます。どのようにしましたら選択した写真のみのデータとすることができますでしょうか。 func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) { let fetchResult = PHAsset.fetchAssetsWithMediaType(PHAssetMediaType.Image, options: nil) fetchResult.enumerateObjectsUsingBlock ({result, index, stop in if let asset = result as? PHAsset { if let location = asset.location { let lat = location.coordinate.latitude as Double let lng = location.coordinate.longitude as Double print(“GPS:(lat),(lng)”) } } }) } 解決…(Continue Reading)

fatal error: unexpectedly found nil while unwrapping an Optional value

publicado por: Anonymous Tengo la siguiente función para llamar una URL que se encuentra en un REST desde Swift 2, pero cuando envío valores con espacio en el NSURL me aparece el siguiente error: fatal error: unexpectedly found nil while unwrapping an Optional value class func getApi(urlWithArgs: String?) -> NSMutableURLRequest { let url: NSURL =…(Continue Reading)

¿Como visualizar imágenes correspondientes a un Array en Swift?

publicado por: Anonymous En el código de abajo inicie las imágenes en un array con una lista de nombres. Quiero que el orden de las imágenes sean alineada con el orden de el array de nombres. Esto es lo que intenté y conseguí un error que dice: Thread 1: EXC_BAD_INSTRUCTION ( code=EXC_I386_INVOP, subcode = 0x0)…(Continue Reading)

リネームしたdefault.realmを読み込み、表示したい

投稿者: Anonymous swiftで日記アプリを作っています。 実現したいことは、ローカルデータベースrealmのデータファイル(default.realm)をdropboxにバックアップし、復元することです。 ユーザーがアプリを消してしまい、再ダウンロードした状態でDropboxにログインした際に、Dropboxに保存しておいたdefault.realmをdefaults.realmという名前でダウンロードし、default.realm(未ログイン時のデータ)を1件づつdefaults.realmにコピー。元のdefault.realmを削除し、defaults.realmをdefault.realmにリネームするという形でファイルを復元するところまでを実装しました。 しかし、復元した新しいdefault.realmからデータを取りだしたいのですが、元々のdefault.realm(未ログイン時のデータ)からデータを取り出す形になってしまいます。以下がdefaults.realm→default.realmへのリネーム、realmからデータを取り出す部分のコードです。 if NSFileManager.defaultManager().fileExistsAtPath(“(documentDirPath)/(fileName)”) && NSFileManager.defaultManager().fileExistsAtPath(“(documentDirPath)/(fileNames)”){ try!NSFileManager.defaultManager().removeItemAtPath(“(documentDirPath)/(fileNames)”) try!NSFileManager.defaultManager().moveItemAtPath(“(documentDirPath)/(fileName)”, toPath: “(documentDirPath)/(fileNames)”) } let realms = try!Realm() let Photo = realms.objects(Photos) print(“写真1(Photo)”) for photo in Photo{ let filename = photo.filename if let client = Dropbox.authorizedClient{ client.files.download(path: “/(filename)”, destination: destination).response({ (response, error) -> Void in if let metadata = response{ print(“download (metadata)”) }else{ print(error)…(Continue Reading)

Swift2. 配列を削除するremoveAtIndex()について質問です

投稿者: Anonymous 早速質問なのですが、今現在簡単な間違い探しの様なゲームを作成しようとしています。 内容としては、正方形を同じ形で色を付けて4つ表示し、1つだけ違う色で表示するというものです。 そこでいくつもの問題を作り(赤色、黄色、青など)ランダムに表示させた後に 1回選ばれた問題を削除する(配列から削除し、次回から表示させない)用にしたいのですが うまくその問題が削除されずに、また表示されてしまいます。 コードは以下になります。 コードの問題があると思う所は、「問題をランダムに選んでその後削除する」になります。 よろしくお願いします。 import SpriteKit import GameplayKit class GameScene: SKScene { //問題設定 let randomSource = GKARC4RandomSource() var questionMax:Int = 6 var questionList:[SKShapeNode] = [] let correct = [“■”] let mistake = [“■”] var questionNo:Int = 0 var misutakeNo:Int = 0 override func didMoveToView(view: SKView) { //問題実行 questioning() }…(Continue Reading)

admob sdkを実機で走らすと、エラーになる

投稿者: Anonymous 改善策を教えていただけないでしょうか? エミュレーターでは動きますが、実機はコンパイルエラーになります。 以下参照したホームページです。 https://akira-watson.com/iphone/admob.html ここに書かれているフレームワークも追加しています。 よろしくお願いいたします。 エラーコードです。 ld: ‘/Users/*****/Desktop/*****/TestKoukoku/GoogleMobileAds.framework/GoogleMobileAds(GADBannerView.o)’ does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture arm64 clang: error: linker command failed with exit code 1 (use -v to see invocation)…(Continue Reading)

reloadDataとviewWillAppear

投稿者: Anonymous viewWillAppear override func viewWillAppear(animated: Bool) { getData() myTable.reloadData() super.viewWillAppear(animated) } getData() func getData() { Alamofire.request(.GET, “http://sample.jp/api/info”) .responseJSON { response in guard let object = response.result.value else { return } …省略… dispatch_async(dispatch_get_main_queue()) { self.myTable.reloadData() } } } 今上記のように記述しているのですがAlamofireの処理の最後にreloadDataを入れて、 viewWillAppear内で呼び出して、表示されるたびに更新しているのですが、 この際にviewWillAppear内にもreloadDataを記述する必要性はありますでしょうか。 ご回答の程よろしくお願いいたします。 解決 getData()での非同期読み込みが完了してから改めてreloadしているので、viewWillApear内のreloadは意味がなく見えます。 viewWillApear内のタイミングでは情報がダウンロードされていないでしょうからreloadしても初期表示のままだと思います。 あっても害はないと思いますが、不要だと思います。 回答者: Anonymous

addTargetでactionがうまく機能しない?

投稿者: Anonymous Code var stepRatingView: AXRatingView = AXRatingView(frame: CGRectZero) stepRatingView.sizeToFit() stepRatingView.stepInterval = 1.0 stepRatingView.addTarget(self, action: Selector(ratingChanged(stepRatingView)), forControlEvents: UIControlEvents.ValueChanged) self.secondView.addSubview(stepRatingView) func ratingChanged(sender: AXRatingView){ print(stepRatingView.value) self.label.text = String(sender.value) } どうしたいのか Amazonなどで見られる「★★★★★」の評価を、スライドで行おうと思い、 コードをSwiftに読み替えています。 Objective-Cのコードではラベルの値が変化するのですが、 Swiftに変換するとラベルの値が変化しません。 うまくaddTargetのactionが接続できていないのでしょうか。 解決 Selectorインスタンスの作り方が間違っています。 Selector(ratingChanged(stepRatingView))と言うのは、Selectorのコンストラクターに、引数としてratingChanged(stepRatingView)と言う メソッドを呼び出した結果 を渡しています。(従ってこの行が実行された時にratingChanged(_:)が実行されているはずです。)ratingChanged(_:)の戻り値はVoidですので、結局Selector()と同じ結果になります。 Selectorインスタンスをコンストラクターで作成する場合には、Selector(“Objective-C形式のメソッド名”)の形を使います。あなたのコードだとこんな感じです。 stepRatingView.addTarget(self, action: Selector(“ratingChanged:”), forControlEvents: .ValueChanged) ただし、Xcode7.3以降をお使いでしたら、(Swift3への準備として)#selector構文を使われた方が良いでしょう。 短い書き方(同じクラス内のメソッドで、オーバーロードされていない場合) stepRatingView.addTarget(self, action: #selector(ratingChanged), forControlEvents: .ValueChanged) 長い書き方(できるだけ曖昧になりにくい書き方) stepRatingView.addTarget(self, action: #selector(ViewController.ratingChanged(_:)),…(Continue Reading)

セル1つ1つに別なサブタイトルをつける方法を教えてください。

投稿者: Anonymous テーブルビューにてセルを追加する際にタイトルとサブタイトルをつけたいのですが、タイトルは問題なく出来たのですが、新しいセルを追加するたびにサブタイトルに表示する文字が変わってしまってこまっています。 多分原因は y: Float = 0書いてあるからだと思っています。 yにx1とx2を掛け算して求めた値を代入していて、それをサブタイトルをしてcell.detailTextLabel?.text = String(format: “%.f回”, y)で呼び出してるので保存するたびにサブタイトルが変わっているのだと思います。 そこでセル1つ1つに計算して求めた回数が表示されるようにサブタイトルをつけたいのですがどのように書き直せばよろしいでしょうか? import UIKit var y: Float = 0 private var score: UILabel! class ViewController: UIViewController,UITextFieldDelegate { private var myTextField: UITextField! private var myTextField2: UITextField! override func viewDidLoad() { super.viewDidLoad() // ボタンを生成する. let nextButton: UIButton = UIButton(frame: CGRectMake(0,0,self.view.bounds.width/3,self.view.bounds.height/11)) nextButton.backgroundColor = UIColor.redColor(); nextButton.layer.masksToBounds = true…(Continue Reading)

処理中に一定時間経ったらキャンセルさせる場合

投稿者: Anonymous 処理が一定時間経ったらタイムアウトさせたいと思い、以下のソースをswiftで書き換えてみました。 dispatchのcancelの方法を実践してみる var source: dispatch_source_t? func setTimer(date: NSDate, block:() -> ()) { // deltaIntervalを取得してあげる let deltaInterval: NSTimeInterval = date.timeIntervalSinceDate(NSDate()) asyncAfterDelay(deltaInterval, block: block) } func cancelTimer() { print(“キャンセルロジック外側に入りました。”) if source != nil { print(“キャンセルロジックに入りました。”) dispatch_source_cancel(source!) } } func asyncAfterDelay(delay: NSTimeInterval, block:() -> ()) { return asyncAfterDate(NSDate(timeIntervalSinceNow: delay), block: block) } func asyncAfterDate(date: NSDate, block:()…(Continue Reading)

protocolとdelegateによる別View内の関数実行

投稿者: Anonymous protocolとdelegateを利用して、他View内の関数を実行したいと考えています。 【やりたいこと】 PlacePickerViewで都道府県を選択した時に、NoTeamView内のTextFieldとButtonのラベルをその都道府県に変更したい。 【現状】 シミュレータは起動するが、pickerviewを選択した際、 print(“tete(placeValues[row])”)は効いているものの、 print(“this(selectedValue)”)とprint(“test”)が効かない。 NoTeamView.swift import UIKit import RealmSwift class NoTeamView: UIView, UITextViewDelegate, UIPickerViewDelegate, PlacePickerViewDelegate { var noTeamPlaceEditButton : UIButton = UIButton() var noTeamPlaceTextField : UITextField = UITextField() var placePickerView = PlacePickerView() override init(frame:CGRect) { super.init(frame:frame) setupCustomView() } required init?(coder aDecoder: NSCoder) { fatalError(“init(coder:) has not been implemented”) setupCustomView() }…(Continue Reading)