perhaps the designated entry point is not set?

ストーリーボードをいじっていたらこんなエラーが出たのでメモ。



エントリーポイントがないからどのViewControllerから呼べばいいかわからないよ!!

はい、題名のような理由でエラーになっています。 ストーリーボードにはどのViewControllerから呼ぶかを指定する必要があります。

なので設定しましょう。

  • アプリが起動したときに呼ばれるストーリーボード上Viewを選択する

f:id:jesus9387:20170419125046p:plain

  • 選択したら右ペインの下記を選択

f:id:jesus9387:20170419125103p:plain

  • is Initial View Controllerにチェックを入れる

f:id:jesus9387:20170419125112p:plain

これでエラーは消えるはずです。

キーボードでEnterを押すと画面をキーボードが閉じるようにする

Swiftではなにも実装しないとEnterを押してもキーボードが閉じません

そこで以下のように実装します

import UIKit

class ViewController: UIViewController , UITextFieldDelegate{

    @IBOutlet weak var textField: UITextField!
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        
        //デリゲートを設定
        textField.delegate = self
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    //このメソッドを書くとキーボードを閉じれるようにnarimasu
    func textFieldShouldReturn(_ textField: UITextField) -> Bool{
        // キーボードを閉じる
        textField.resignFirstResponder()
        return true
    }
}

しかしこの方法だと少し問題あり、、、、

UITextFieldを使うたびに毎回以下のメソッドを書くのはめんどくさいですね、、、

//このメソッドを書くとキーボードを閉じれるようにnarimasu
    func textFieldShouldReturn(_ textField: UITextField) -> Bool{
        // キーボードを閉じる
        textField.resignFirstResponder()
        return true
    }

同じことを繰り返させないようにすることに全力を出すのがプログラマーです。 そこで以下のように実装しましょう

自動生成されるViewControllerはお便利メソッドを置いておくクラスとする

ViewController

import UIKit

class ViewController: UIViewController , UITextFieldDelegate{
    
    var textFieldDelegate:UIViewController?

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    func textFieldShouldReturn(_ textField: UITextField) -> Bool{
        // キーボードを閉じる
        textField.resignFirstResponder()
        return true
    }
}

これを作成し、Main.storyboardの画面ごとに新しくViewControllerクラスを作成し、先ほど作成したViewControllerに継承?させます

MainViewController

import UIKit

//先ほど作成したViewControllerクラスを継承させる
class MainViewController: ViewController{
    
    @IBOutlet weak var textField: UITextField!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        
        //アウトレット接続したUITextFieldにデリゲートをセットさせる
        textField.delegate = self
        
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

以上です。 これ同じメソッドを何回も書く必要はなくなりました。

私はこのViewControllerクラスに画面遷移するメソッドなどよく使う機能はここに書いて呼び出すようにしています。 ViewControllerが肥大化すると可読性がさがるので、、

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc failed with exit code 1

CoreDataを使ってデータを保存しようとしたら題名のエラーが出てコンパイルできなくなりました。

色々調べてみるといろんな解決方法が、、

私が解決した方法を残しておきます。

解決方法

Entitieを選択 -> Moduleを"Current Product Module"に変更 -> Codegenを"Manual/None"に変更

f:id:jesus9387:20170410122809p:plain

f:id:jesus9387:20170410123410p:plain

私はこの方法で解決しました。

ブラックアウトステッカー for Mac を買ってみた

自分プログラミングをするときタイピングがすごく遅くなるので これを練習目的で買ってみました。

f:id:jesus9387:20170408111210j:plain

また、私が尊敬する「増井雄一郎さん」(@masuidrive)も使用していて、 真似しました。笑

手触り

とても良いです!!!! 滑らかで、これを貼ったからといってキーボードが打ちにくくなるということはありません!

また、Macのキーボードも保護することもできますので一石二鳥ですね。

f:id:jesus9387:20170408111256j:plain

なにより、かっこいい

はい、かっこいいです。 Macbookを購入するときに無刻印にするオプションとかあればいいな〜と思います。

f:id:jesus9387:20170408111339j:plain

タイピングに関して

正直まだ慣れません、、、、、 タイピングって無刻印にしただけでこんなに難しくなるのだと感じます。

ブラインドタッチができると思っていても、無意識のうちにキーボードをみているんですかね、、

f:id:jesus9387:20170408111425j:plain

商品について

商品はアマゾンで買うことができます。 私は、Macbook air 13inch を使用していますが、 USキーボード用や、Macbook、新型MacbookProなどのバタフライキーボード(キーボードが薄いやつ)に対応しているものもあるようです。

↓私が購入したもの

↓US配列

↓バタフライキーボード用

もろもろ

私のTwitterGithubも宜しくお願いします。

Twitter https://twitter.com/SuperPerson0807

Github https://github.com/yshogo

Androidで画面にデータを表示するときに注意

TextViewなどで画面にデータを表示する場合

全てString型に変換する必要があります!!!

Button submit = (Button)findViewById(R.id.submit);
submit.setText("ここは必ずStrin型!!!");

お名前.com

以下はエラーになります。

int num = 3:
Button submit = (Button)findViewById(R.id.submit);
submit.setText(num);

どうやら、リソースIDと勘違いして「そんなリソースIDはないよー」っていうエラーを出すようです。。。。。

以下のように実装しましょう

int num = 3:
Button submit = (Button)findViewById(R.id.submit);
submit.setText(String.valueOf(num));

今日かなりハマりました。。。。。。

画面遷移する前に制御する[Swift]

画面遷移する前に制御する[Swift]

Swiftでは画面遷移する前に入力バリデーションチェックしたり、遷移先の画面にデータを渡したしするすることができます。

画面遷移する前に以下のメソッドを呼び出す

override func shouldPerformSegue(withIdentifieridentifier: String, sender: Any?) -> Bool 

falseを返したときは画面遷移させずにtrueを返したときだけ画面遷移します。

以下のサンプルソースのコメントを使って解説します。

期間限定イチ押しグルメが大集合!買うなら楽天市場

class ViewController: UIViewController {

    @IBOutlet weak var textField: UITextField!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    //下記のメソッドを追加する
    override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool {
        
        //データが空の場合は画面推移しない
        if textField.text == ""{
            
            return false
        }
        //trueを返したときだけ画面遷移する
        return true
    }

値を次の画面に渡したい場合もこのメソッドの中でデータをセットすればよいということになります。

以上です。

Ruby on Railsでデータベースとやりとりする(初心者向け)

Ruby on Railsでデータベースとやりとりする方を説明します。

開発環境構築が終わっていることを前提として説明していきますのでまだ開発環境構築できていない方は先に行ってきてください。(Webで探せば色々ありますので)

1、プロジェクトの作成

Ruby on Railsでは主にコマンドプロンプトで使っていきます。

Railsのプロジェクト作成は以下のコマンドで作成できます

rails new プロジェクト名

プロジェクト作成

今回は商品管理システムを作成していきます。

コマンドプロンプトで以下のコマンドを実行します。

rails new productManagment

すると下記のようにRailsのファイルが作成されていきます。

スクリーンショット 2017-02-19 9.51.20.png

2、Railsのプロジェクト内に必要なファイルを作成していく

cd コマンドを使って先ほど作成したディレクトリに移動しましょう

cd productManagment

必要なファイルの作成

Railsでは必要なファイルをコマンド作成できます

rails generate 必要なファイル

今回は「scaffold」コマンドを使って標準的なファイル群及び設定ファイルを一気に作ります。

rails generate scaffold データモデル名 データ属性:形式(複数列記)

今回は、登録する商品の「名前」「価格」「説明」を登録できるようにします。

rails generate scaffold Product name:string price:integer content:text

下記のように必要なファイルが作成されました。

スクリーンショット 2017-02-19 10.08.23.png

3、データベースファイルに自動書き込み

ここまでではまだ、「データベースファイル」が作成されていないので、「データベースファイルに書き込み操作」をします。

以下のコマンドを実行するとデータベースファイルに書き込まれます。

rails db:migrate

スクリーンショット 2017-02-19 10.13.06.png

4、商品管理システムを実行する

1〜3の操作のみで「商品管理システム」の完成です。(笑)

簡単すぎますね、、、

それでは作成したシステムを実行します。

サーバーを起動する

ローカルサーバーを起動するために以下のコマンドを実行します。

rails server

以下のような画面がでたらサーバーが起動できています。

スクリーンショット 2017-02-19 10.18.04.png

サーバーが起動したらwebブラウザを使って画面に表示させます。

システムを表示する

webブラウザで以下URLに作成する

http://localhost:3000/products

すると以下のような画面が表示されます。

スクリーンショット 2017-02-19 10.29.44.png

この画面では商品の

「表示」「登録」「編集」「削除」

の機能が備わっています。簡単すぎますね。。。。

ソースコードgithubに置いておきます。

GitHub

次回は画面を編集したり、新たな機能を追加したりしていきます。