Objective-Cに関するcolorless64のブックマーク (94)

  • NSDictionary⇔自作オブジェクトに変換する方法 - Qiita

    #import "Person.h" @implementation Person - (NSArray *)personKeys { return @[@"firstName", @"lastName", @"bloodType", @"age"]; } @end #import "ViewController.h" #import "Person.h" @interface ViewController () @property (strong, nonatomic) NSArray *personData; @end @implementation ViewController - (NSArray *)personData { NSMutableArray *persons = [NSMutableArray array]; NSDictionary *person1 = @{@"

    NSDictionary⇔自作オブジェクトに変換する方法 - Qiita
    colorless64
    colorless64 2015/02/15
    NSDictionary->自作オブジェクトはNSDictionaryのkeyと同名のプロパティを自作オブジェクトで定義する。自作オブジェクト->NSDictionaryはkeyとなる文字列を配列で返すメソッドを自作オブジェクトに定義する。
  • クラス拡張とカテゴリの違いの話。 - なるようになるかも

    常々「クラス拡張をカテゴリってゆーな」って思ってるんだけど、「無名カテゴリ」自体は公式の呼称なんだよね。 [Objective-C] クラス拡張と無名カテゴリ - Qiita Objective-Cのクラス・カテゴリ・クラス拡張の整理 - $ cat /var/log/shin クラス拡張は、無名のカテゴリに似ています。が、別物です。一番の違いは、インスタンス変数を宣言できることと、宣言したメソッドはクラス体の(=カテゴリ無しの)@implementationで実装しなければならない点です。 クラス拡張とカテゴリの一番の違いは、「クラス拡張はクラス実装と共にランタイムにロードされることが保証される」ことだと思います。 文脈として、もともとobj-c 2.0以前にはクラス拡張がなく、またメソッドのプロトタイプ宣言が必須だったこともあり、「外部に公開したくないメソッド宣言はプライベートなカテ

    クラス拡張とカテゴリの違いの話。 - なるようになるかも
    colorless64
    colorless64 2015/02/15
    クラス拡張は静的(コンパイル時解決)でカテゴリは動的(実行時解決)である。だから前者ではインスタンス変数が追加できる。/ プライベートなインスタンス変数は@implementationで宣言できるので可能な限りそうすべき。
  • Objective-Cのクラス・カテゴリ・クラス拡張の整理 - $ cat /var/log/shin

    以前こんな記事を書きました。 Objective-Cのプロトコルとデリゲートのまとめ - $ cat /var/log/shin 現時点で、こんな場末のブログで唯一ブクマが多い記事なのですが、その文末で、 次は、カテゴリについて勉強したいと思います。 Objective-Cのプロトコルとデリゲートのまとめ - $ cat /var/log/shin なーんて書いてから、はや9ヶ月超。ようやくカテゴリについて調べる機会が来たので、まとめてみます。 座学編 クラスの基 まず初めにクラスの基を整理しておきます。 // ex1.h #import <Foundation/Foundation.h> @interface MyClass1 : NSObject - (void)publicMethod; @end // ex1.m #import "ex1.h" @implementation

    Objective-Cのクラス・カテゴリ・クラス拡張の整理 - $ cat /var/log/shin
    colorless64
    colorless64 2015/02/15
    @interfaceとか@implementationの話。カテゴリを使用すれば既存のクラスの実装に一切手を付けずに既存のクラス自体にメソッドを追加することができる。
  • リフレクション (情報工学) - Wikipedia

    この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。出典を追加して記事の信頼性向上にご協力ください。(このテンプレートの使い方) 出典検索?: "リフレクション" 情報工学 – ニュース · 書籍 · スカラー · CiNii · J-STAGE · NDL · dlib.jp · ジャパンサーチ · TWL(2023年1月) 情報工学においてリフレクション (reflection) とは、プログラムの実行過程でプログラム自身の構造を読み取ったり書き換えたりする技術のことを指す。 概要[編集] 日語では自己言及と呼ばれる。通常リフレクションというと動的(実行時)リフレクションのことを指すが、静的(コンパイル時)リフレクションをサポートするプログラミング言語もある。リフレクションはSmalltalk、Java、.NET Frameworkのような仮想機械やインタプリタ上で

    colorless64
    colorless64 2015/02/10
    いろいろな言語でのリフレクションあり/なしコードサンプル
  • introspection(reflection)メソッド/関数

    colorless64
    colorless64 2015/02/10
    クラス名からクラスオブジェクトを取得したり、メソッド名からセレクタ(メソッド?)を取得する。リフレクション
  • An iphone uipickerview that rotates horizontally?

    colorless64
    colorless64 2015/02/04
    横方向に回転するUIPickerView
  • [Objective-C] クラス拡張と無名カテゴリ - Qiita

    この記事にリンクして、詳細に書いてくれている記事があったので紹介。 クラス拡張とカテゴリの違いの話。 Objective-Cの内部実装にも触れて分かりやすく書いてくれているので、より どういう違いがあるかが分かるかと思います。 AppleのiOS View Controllerプログラミングガイドを読んでいて気づいた。 なんで実装ファイルの方で@interfaceを宣言しているんだろうと思っていたのだけど、これはどうやら クラス拡張 というものらしい。 似たような仕組みに、 カテゴリ がある。 カテゴリは@interface Hoge(anyCategory)で宣言するやつ。 これを無名にしている(つまり@interface Hoge())のが、実装ファイルでよく書かれているやつだ。 なるほど、無名カテゴリだから()なのか。 と腑に落ちたことをTwitterでつぶやいたら、「いや

    [Objective-C] クラス拡張と無名カテゴリ - Qiita
    colorless64
    colorless64 2015/02/04
    *.mにある@interfaceの件。カテゴリは@interface Hoge(anyCategory)で宣言するやつ。これを無名にしている(つまり@interface Hoge())のが無名カテゴリ。ただし厳密には後者はクラス拡張であり、カテゴリとは別の機能。
  • Class Extension - Qiita

    なぜかSomeObject.mでもinterfaceの宣言がされている。これが何か意味がわからなかったけれど、クラスエクステンションというものらしい。 クラスエクステンションとは? クラスエクステンション(Class Extension)とはObjective-Cのカテゴリの一種でエラーを防ぐために使われる。カテゴリにおいては通常Objective-Cのリンカは柔軟性を保証するために、宣言したすべてのカテゴリが実行ファイルに揃っているか確認を行わない。そのためカテゴリに依存しないクラス内でのプライベートメソッドの実装を入れ忘れても、エラーを出さずに実行ファイルが作成されてしまう。 これを防ぐのがクラスエクステンションだ。例にあったSomeObject.mにあるように

    Class Extension - Qiita
    colorless64
    colorless64 2015/02/04
    *.mにある@interfaceの件
  • イニシャライザ

    オブジェクトの初期化 インスタンス変数を保有しているクラスの場合、その多くが初期値を必要とするでしょう。 初期化を忘れてしまった場合、適切に動作しない可能性があります。 一般的なオブジェクト指向型言語では、オブジェクトを安全に、確実に初期化するための方法としてコンストラクタを用意しています。 コンストラクタは、クラスのインスタンスが作成された直後に自動的に呼び出される特別なメソッドのことですが、Objective-C ではコンストラクタは存在しません。 その代わり、コンストラクタはルートクラスが仕様に基づいて提供する構造を採用しているため、ルートクラスの初期化用メソッドを明示的に呼び出さなければなりません。 Object ルートクラスや、Mac OS X の NSObject クラスでは、init という名前のメソッドがオブジェクトの初期化用メソッドとして定義されています。 この init

    colorless64
    colorless64 2015/02/03
    initの話。コンストラクタにあたるアレ。
  • イニシャライザが守るべき3つのルール - Qiita

    オブジェクトを初期化するイニシャライザ、init で始まるメソッドですね。 init とか initWithString とか。他言語でいうところコンストラクタ代わりです。 iOS開発している人なら、「指定イニシャライザ」 という単語は聞いたことある人多いと思いますが、これの意味と役割を理解せずに組んでいる人も多いのではないでしょうか? そしてイニシャライザではいくつか守ったほうがいいルールがあります。 3 Rules for initializers 結論から書くと、以下の3つルールをイニシャライザでは守ると効率的になります。 (1)必ず一つの指定イニシャライザを持つ(基的に複数はナシ) (2)指定イニシャライザ以外のイニシャライザは、必ず指定イニシャライザ経由で初期化する (3)親クラスの指定イニシャライザは必ずオーバーライドする 理由はこの記事で説明します。(※長いです) clas

    イニシャライザが守るべき3つのルール - Qiita
  • 写真を簡単にSNSに連携できる!UIActivityViewController | ずっとMegane。

    いまや当たり前過ぎて、日常生活から切っても切れないSNS。 カメラアプリは特に写真を投稿する一手段となる為、SNSの連携は外せません。 でも、なんか難しそうですよね。私も最初そう思っていました。 しかし、いざやってみると、簡単なんですよね。 今回はそのSNSへの連携や保存を行う、UIActivityViewControllerの実装方法ご紹介します。 UIActivityViewControllerで簡単保存&連携 UIActivityViewControllerでの基的な実装方法は次のような形になります。 //保存したいイメージ UIImage *saveImage = camera_image; // UIActivityViewController UIActivityViewController *activityView = [[UIActivityViewController

    写真を簡単にSNSに連携できる!UIActivityViewController | ずっとMegane。
    colorless64
    colorless64 2015/02/02
    カスタムUIActivityのまとめリポジトリへのリンクあり
  • UIActivityViewControllerを使ったデータ共有 - Toyship.org

    UIActivityViewControllerはiOS6で新しく追加されたクラスです。 Facebook、Twitterなど、システムで用意された複数のアイテムに加え、アプリ独自の機能を追加することができる使い勝手のよい新機能です。 iOS6でしか使えないのが難点ですが、是非使いこなしていきたいですね。 UIActivityViewControllerとは UIActivityViewControllerは、指定したオブジェクトに応じて、ファイル共有やメール添付などの機能を自動的に表示してくれるViewControllerです。 UIDocumentInteractionControllerと違い、特定のファイルを指定するのではなく、複数のオブジェクトを指定します。 さらにアプリ独自の機能を追加することもできる、なかなか応用範囲の広いViewControllerです。 システムActiv

    UIActivityViewControllerを使ったデータ共有 - Toyship.org
    colorless64
    colorless64 2015/02/02
    オリジナルのActivity(共有ボタンをタップしたときに表示されるViewで、外部アプリとの連携に使用するアレ)作成。サンプルソース中の autorelease は不要
  • カスタムURLスキームを設定して自分自身のカスタムURLスキームを呼び出す - iOSアプリ開発の逆引き辞典

    カスタムURLスキームを使用して他のアプリを起動する方法をいくつか紹介しました。 カスタムURLスキームを使って地図アプリに位置座標を渡して連携起動する - iOSアプリ開発の逆引き辞典 カスタムURLスキームを使って通話アプリに電話番号を渡して連携起動する - iOSアプリ開発の逆引き辞典 上記で紹介した方法は、呼び出し元アプリと呼び出し先アプリが異なるケースです。呼び出し元が呼び出し元のカスタムURLスキームを使っているケースはあまり知りません。 記事では呼び出し元アプリ側にカスタムURLスキームを設定して、呼び出し元アプリがカスタムURLスキームを使って自分自身を呼び出す方法を紹介します。 使い道はあまりないかもしれませんが、カスタマイズ可能なAR機能を提供するAurasma SDKやグループチャット機能を提供するLobi SDK(旧称:nakamap SDK)を使用して、制御がア

    カスタムURLスキームを設定して自分自身のカスタムURLスキームを呼び出す - iOSアプリ開発の逆引き辞典
    colorless64
    colorless64 2015/02/02
    カスタムURLスキーム( myapp:// のような形式)を使って他のアプリを呼び出す
  • 【Objective-C】1つのViewでUIActionSheetを複数使った場合のメソッドの振り分け方法

    てぃーによるiPhone/Mac/Android/Windowsアプリ開発、ウェブサービス開発、 ツイッター分析、音楽DTMイラストなど創作活動の記録です。 ブログ名は「創造性:creativity」(クリエイティビティ)と「てぃー」から。 勉強内容、デジタル製品(デジモノ)、エンタメについても書いていきます。 今回は1つのViewでUIActionSheetを複数使った場合のメソッドの振り分け方法についてです。 UIActionSheetではいくつかのボタンを設置でき、それをタップしたときにそれぞれのメソッドを実行することができます。 しかし、実行には - (void)actionSheet:(UIActionSheet*)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex をオーバーライドするため、1つのViewでUIAc

    colorless64
    colorless64 2015/02/02
    UIActionSheetの設定側でtagプロパティを設定し、デリゲートメソッド側はどこから呼ばれたかをtagで判定する
  • ios Socialフレームワークでtwitter,facebookへ共有機能を実装する - 恥知らずのウェブエンジニア -web engineer, shameless

    アレが落ち着いたので、iosアプリの開発再開! やっぱりtwitter,facebookへの共有機能つけたいと思い、実装してみました。 実装方法は、使っていた入門書にあったSocial.frameworkを使ってみました。 いろいろ細かい連携が必要な時は、facebookなんかはsdkとかを使うっぽい。 まずは共有だけなので、Social.frameworkでイキマス。 手順的には、 Social.frameworkを追加 xcodeの「linked frameworkes and libraries」からSocial.frameworkを追加 FrameworksディレクトリにSocial.frameworkが追加されます。 Social.frameworkをインポート 対象の.mファイルにいつも通りのこれを #import <Social/Social.h> ツイート、シェアボタン作る

    ios Socialフレームワークでtwitter,facebookへ共有機能を実装する - 恥知らずのウェブエンジニア -web engineer, shameless
    colorless64
    colorless64 2015/02/02
    前提としてアカウントの設定が必要
  • objectivec-iphone.com

    objectivec-iphone.com 2023 著作権. 不許複製 プライバシーポリシー

    colorless64
    colorless64 2015/02/02
    UIApplicationクラスのopenURLメソッドを使用してSafariを起動する
  • アプリ内メーラーを起動する「MFComposeViewController」の使用方法 - 廣川政樹の開発ブログ - Dolice Lab

    #import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // メール送信ボタン配置 [self setSendToMailButton]; } // メール送信ボタン配置 - (void)setSendToMailButton { UIButton *sendToMailButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; [sendToMailButton setTitle:@"Open Mailer" forState:UIControlStateNormal]; [sendToMailButton sizeT

    アプリ内メーラーを起動する「MFComposeViewController」の使用方法 - 廣川政樹の開発ブログ - Dolice Lab
    colorless64
    colorless64 2015/02/02
    メールの送信。前提としてアカウントの設定が必要。「使用方法」セクションの内容だけではアプリ内メーラーのデリゲートメソッド未定義により、呼び出し元アプリに戻れないため後半も確認&実装のこと
  • iphone-app-tec.com

    iphone-app-tec.com
    colorless64
    colorless64 2015/02/02
    1.UIApplicationでSafariを起動する 2.UIWebViewを使う 3.Storyboardを使う(UIWebView+拡張)
  • Objective-Cの基本 - Qiita

    用語整理 ビルド コンパイルとリンクを経て実行可能ファイルを生成。 コンパイル ソースコードを中間オブジェクトに変換。 リンク 諸々のライブラリやファイルを結合させて一つにまとめる。 コンパイラディレクティブ Objective-Cにおいて、@で始まるものはプログラムでは無くコンパイラへの指示。 これをコンパイラディレクティブと言う。 変数の利用 変数を利用するには 最初に宣言文を記述しておく必要がある。

    Objective-Cの基本 - Qiita
    colorless64
    colorless64 2015/02/02
    クラスの定義など
  • iOS8にてLaunchScreen.xibを使用せずに従来通りの起動画面(スプラッシュ)画像を使いたい場合の対処 | makotton.com

    Xcode6からはLaunch Screen File項目にてLaunchScreen.xibを選択しxibにてベクター画像を設定することで、スプラッシュ画像が各画面サイズに自動的に対応するようになりました。 とても便利なのですが、すぐにベクター画像が用意できない状況や画面サイズによって画像を使い分けたい場合など、なにか特別な事情がある場合はLaunchScreen.xibを使用せず従来通りに各画面サイズの画像を適用したいこともあるかと思います。 [adsense] iOS7が載った端末で動かす場合Launch Images Sourceに各画像が設定されていればそちらが優先されますので特に何も考えなくても良いのですが、iOS8が載った端末だとデフォルトでLaunchScreen.xib(Main.storyboardが選択されていればそちら)を参照するようになっていますので、各画面サイズ

    colorless64
    colorless64 2015/01/29
    LaunchImageの画像を表示させる場合、General>AppIcons and LaunchImages>LaunchScreenFileは空にする