swift2.3 シェア機能で、「Cannot assign value of type ‘(_, Bool, Array<_>!, NSError!) -> ()’ to type ‘UIActivityViewControllerCompletionWithItemsHandler?’」エラーが

swift2.3で友達いないけど、友達にシェアする機能を実装してたら、

こんなエラーが。。w


Cannot assign value of type '(_, Bool, Array<_>!, NSError!) -> ()' to type 'UIActivityViewControllerCompletionWithItemsHandler?'

いままでつい最近までエラーじゃなかったのに、xcode8&swift2.3に更新したからか。。

UIActivityViewControllerでシェア機能を実装していると、
皆さんぶつかると思うので対応方法。
英語の記事はめちゃくちゃあったのですが、何故か日本の記事はなかったので一応。


activityVC.completionWithItemsHandler = { (s: String?, complete: Bool, items: [AnyObject]?, err:NSError?) -> Void in if (complete) { printf("完了") }else{ printf("失敗") } }

completionWithItemsHandlerの引数を調整すればOKでした!

これでtwitterfacebook等に投稿したかどうか判定できる!

やっほい

xcode8 swift2.3でRealmSwiftを使う際にpod installで下記エラーがでた

最近xcodeをxcode8にして、色々かわりすぎて戸惑いを隠せない、
小心者筆者です。。

いままでxcode7.3かな?で動かしていたRealm Swiftが使えなくなったのでメモ。
前提として、xcode8でswift2.3を使った場合です。

Podfileで下記のようにrealmをインストールしていたのですが


pod 'RealmSwift'

pod install するとっこのようなエラー


$ pod install /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/universal-darwin15/rbconfig.rb:213: warning: Insecure world writable dir /Applications/Cocos/tools/ant/bin in PATH, mode 040777 Analyzing dependencies Pre-downloading: `RealmSwift` from `https://github.com/realm/realm-cocoa.git`, branch `master`, submodules `true` [!] Unable to satisfy the following requirements: - `Realm (= 2.0.2)` required by `RealmSwift (2.0.2)` None of your spec sources contain a spec satisfying the dependency: `Realm (= 2.0.2)`. You have either: * out-of-date source repos which you can update with `pod repo update`. * mistyped the name or version. * not added the source repo that hosts the Podspec to your Podfile. Note: as of CocoaPods 1.0, `pod repo update` does not happen on `pod install` by default.

で、下記で解決


pod 'Realm', :git => 'https://github.com/realm/realm-cocoa.git', :branch => 'master', :submodules => true pod 'RealmSwift', :git => 'https://github.com/realm/realm-cocoa.git', :branch => 'master', :submodules => true

はいそれだけ。っす

storyboradのsegueに紐付けないViewController(画面)に遷移する方法&引数も渡せます!

タイトルの通り、
storyboradのsegueに紐付けないViewController(画面)に、
遷移する方法。。+引数も渡せます!

自作のポップアップ画面等を実装する際に便利なので、
忘れないようにφ(..)メモメモ


// ストーリーボードのMain.storyboardファイルを指定 let storyboard = UIStoryboard(name: "Main", bundle: nil) // ストーリーボードで指定した「CustomPopupViewController」を指定 let vc = storyboard.instantiateViewControllerWithIdentifier("CustomPopupViewController") as! CustomPopupViewController // 予め、CustomPopupViewControllerで宣言してあるpopupNameメンバ変数に値を渡す! vc.popupName = hogeName

味噌は、


as! CustomPopupViewController

ちゃんとクラス名でaliasしてあげないと、


vc.popupName = hogeName

で、引数がわたせないので注意!

swiftで画質を担保したままUIImageをリサイズ

粗い画像

UIImageを高画質のままリサイズするメソッド

extension UIImage{

    // 画質を担保したままResizeするクラスメソッド.
    func ResizeUIImage(width : CGFloat, height : CGFloat)-> UIImage!{

        let size = CGSize(width: width, height: height)

        UIGraphicsBeginImageContextWithOptions(size, false, 0.0)
        var context = UIGraphicsGetCurrentContext()

        self.drawInRect(CGRectMake(0, 0, size.width, size.height))
        var image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()

        return image
    }

}

使い方


// 80x80にリサイズだけど画像も高画質のまま! let resizeSelectedImage = UIImage(named: "hoge.png")!.ResizeUIImage(80, height: 80)

綺麗な画像のままリサイズできました!

GameCenterのスコアボードを独自UI等で利用(swift版)

gamecenter アイコン

GameCenterのスコアボードを、swiftを使って独自UI等で利用する方法を〜〜〜φ(..)メモメモ

出来合いのスコアボードを自分のアプリデザインに合わせた形で表示したかったので、
GameCenterのスコアを取得し好きな方法で使ってみた。



var leaderboardRequest: GKLeaderboard = GKLeaderboard() leaderboardRequest.playerScope = .Global leaderboardRequest.timeScope = .Today leaderboardRequest.identifier = "itunes connectで指定したleaderboardID" leaderboardRequest.range = NSMakeRange(1, 10) // Request leaderboardRequest.loadScoresWithCompletionHandler{ (scores, error) -> Void in if error != nil { println("Error \(error))") } else if scores != nil { println("leaderboards \(scores)") // scoresという情報に配列で格納されている } }

scoresは、GKScoreという型で配列で入っているので、
TableViewのデータとして使う事も柔軟に対応できました!

デバッグログを確認すればわかりますが、


println("\(scores.player.alias)") // プレイヤー名 println("\(scores.value)") // スコア

上記のように、プレイヤーの名前や、スコアを取得できます。

参考にさせて頂いたサイト

http://iorisomo.hatenablog.com/entry/2014/04/09/193007

http://stackoverflow.com/questions/28519503/gkleaderboard-localplayerscore-returns-nil-on-ios-8-1-3

http://qiita.com/moco3/items/d9c2a8956d4377bad264

storyboard等で利用しているラベルのフォントを一括で変更(swift版)

swift フォント一括指定

swiftのコードで、ラベルのフォントを一括で変更

AppDelegate.swift


〜省略〜 @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { // Override point for customization after application launch. // 一括でLabelのフォントを変更 UILabel.appearance().font = UIFont(name: "Helvetica Bold Oblique", size: 18.0) 〜省略〜

もちろん UILabel以外も可能!

また、”Helvetica Bold Oblique” みたいに、

コードから呼び出す際に指定するフォント名の確認は下記で可能です!

iphoneアプリをappstoreに申請する際に、launchImage周りでエラーがでる場合

iphoneアプリをappstoreに申請する際に、launchImage周りでエラーがでる場合に、
エラーがでる事がある。

xcodeのバージョンは、xcode7.2.1

xcodeのLaunchImageは、レイアウトファイルをちゃんと指定しているのなになぜか、、
色々調べたところ。

通常は画像ファイルか、storyboardファイルの指定の必要があるが、
昔に作ったアプリなので、storyboardの拡張子ではなく、xibファイルの指定だったからのようでした。

xcode

LaunchScreen.xib → LaunchScreen.storyboard

これをxibからstoryboardで作り直しして指定したら、
無事解決!!!
同じようなシチュエーションの人で、参考なれば嬉しいです!

swiftあるある

間違えやすい系

int型を文字列として表示する際…


var intHoge = 100 label.text = String(intHoge) // 100と表示 var intHoge = -100 label.text = String(intHoge) // マイナスだと表示されない label.text = intHoge.description

挙動系

これを実行すると


println("評価ノード: \(evalX) \(evalY) \(boardScores[evalX][evalY])")

シミュレータ(iphone5s)では…


評価ノード: 5 5 5 評価ノード: 5 3 5 評価ノード: 3 5 5 評価ノード: 5 5 5 評価ノード: 5 3 5 評価ノード: 3 5 5

実機(iphone5で実行)では…


\350\251評\344\276価\343\203ノ\343\203ー\343\203ド\357\274: 3 4 3 \350\251評\344\276価\343\203ノ\343\203ー\343\203ド\357\274: 5 4 5 \350\251評\344\276価\343\203ノ\343\203ー\343\203ド\357\274: 6 4 -5 \350\251評\344\276価\343\203ノ\343\203ー\343\203ド\357\274: 7 4 -5 \350\251評\344\276価\343\203ノ\343\203ー\343\203ド\357\274: 4 5 5 評価ノード: 1 2 -20

…そもそも日本語を使うなと言われそうですが、日本語がおかしくなる。そして僕の日本語もおかしい。。