読者です 読者をやめる 読者になる 読者になる

u16suzuの blog

u16suzu のブログです。

Objective-C

正規表現による検索

// 正規表現オブジェクトを作成 NSRegularExpression *regularExpression = [NSRegularExpression regularExpressionWithPattern:@"reg_exp" options:NSRegularExpressionCaseInsensitive error:nil]; NSString *targetString = @"target string" // 検索実…

アプリが初回起動かをチェックするメソッド

- (BOOL)isFirstLaunch{ NSUserDefaults*ud = [NSUserDefaults standardUserDefaults]; NSString *key = @"isAlreadyLaunched"; NSString *res = [ud objectForKey:key]; if(! [res isEqual:@"Yes"]){ [ud setObject:@"Yes" forKey:key]; [ud synchronize]; …

横浜へなちょこiOS勉強会#30 に行ってきました.

昨日 2014/1/25(土) にミューザ川崎にて横浜へなちょこiOS勉強会#30が開催されまして, 久しぶりの勉強会に行ってきました. メインの発表は次のようなものでした. Xcodeと自作スクリプトについてのTIPSなど(@haranicleさん) こちらの記事の補足みたいな感じで…

TestFlightのMacクライアントが有能だというお話

TestFlightのクライアントアプリを入れて起動しておくと, Xcodeでアーカイブしたときに自動で検出してくれます. TestFlight's Desktop App http://www.testflightapp.com/desktop アーカイブ後ノーティフィケーションセンターでポップアップが出現するので, …

NSAssertでアサーションを行う

以下のようなコードを書くと int val = 299; NSAssert((0 <= val) && (val <= 255), @"Value is out of range!"); こんな感じでログが出て強制終了する. 2013-11-20 16:49:12.779 AppDemo[1935:60b] *** Assertion failure in -[HomeViewController viewDidL…

UIAppearanceを使ってボタンの背景画像を一括で設定する

ボタンがadd subviewされる側のクラスによって指定ができるけど, ちょっと使いづらい. カスタムなボタンを作った方がよいかもしれない. UIImage *btnImg = [UIImage imageNamed:@"hoge"]; UIImage *btnImgHighlighted = [UIImage imageNamed:@"fuga"]; [[UIB…

乱数を生成する

int r = arc4random_uniform(3); // range is 0~2 参考: http://programming-ios.com/objective_c-arc4random/

ナビゲーションバーとステータスバーを除いた画面の高さを取得する

ナビゲーションバーとステータスバーを除いた画面の高さを取得する. float backButtonYorigin = [[UIScreen mainScreen] applicationFrame].size.height - self.navigationController.navigationBar.height; コントロールの位置指定を 下からの距離で指定す…

複数の非同期処理や非同期処理内で場合分けする場合に便利な Deferred について

Deferredとは? 元ネタはjsからきた. 既存では非同期処理において完了,未完了の場合ごとにBlock実行をするというアイディアだったが そうはせずに, 完了,未完了の状態を持ったDefferedオブジェクトを即座に返すと言う方針. Defferedオブジェクトは完了もしく…

nullチェックをする

たまに補完で出てきてくれないときがあるのでメモ NSNumber *hoge; [hoge isEqual:[NSNull null]]

定数を static const で定義する

kは定数のプレフィックス. // .m file #import "ScrollButtonsView.h" static const int kButtonNumber = 5; static const float kButtonPadding = 10.0f; @implementation ScrollButtonsView /* 省略 */ @end 文字列定数の場合は以下の通り // .h file #imp…

Block propertyを使用してエラー処理を共通化する

実装ファイル #import "ViewController.h" #import "CustomView.h" typedef void(^testBlockType)(void); @interface ViewController () @property (nonatomic, copy) testBlockType success; @property (nonatomic, copy) testBlockType failuer; @end @imp…

カスタムビューの動作をビューコントローラ側で設定する

iQONのView構成紹介 14ページ目 http://www.slideshare.net/ararajp/vasilyretty?ref=http://tech.vasily.jp/2013/09/ios_iqon_view/ のスパイクプロジェクトをつくってみた. カスタムビューを作ったときにカスタムビューのなかではなく それを使うビューコ…

typedef を使って Blockの型を独自に定義する

typedef を使って Blockの型を独自に定義することができる. View.h #import <UIKit/UIKit.h> typedef void(^MyCustomBlockType)(void); @interface CustomView : UIView @property (nonatomic, copy) MyCustomBlockType blockName; @property (nonatomic, copy) void (^bloc</uikit/uikit.h>…

Objective-Cのデバッグ用ログ出力で 行数と関数名を表示する

以下を pchファイルに書けばOKです. // Debug #ifdef DEBUG #define DLOG(format, ...) NSLog((@"%s: %d: " format), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__) #else #define DLOG(format, ...) #endif pod にしたい... たしか, pod install したとき…

プロパティ宣言とプロトコルをヘッダに書かずに .m ファイルに書く

ヘッダファイルはできるだけ使わない方向で. @interface QuizSelectionViewController () <UITableViewDataSource, UITableViewDelegate> @property UITableView *table; @end @implementation QuizSelectionViewController @end</uitableviewdatasource,>

main thread で 実行する

dispatch_async(dispatch_get_main_queue(), ^{ // do something });

MagicalRecordメモ

define をpchにでも書いておくとメソッドの prefix(MR_部分) を省略できるようになる. (#importの前に書く必要がある。) #define MR_SHORTHAND #import <CoreData+MagicalRecord.h> context 取得 NSManagedObjectContext *context = [NSManagedObjectContext defaultContext]; オブジェ</coredata+magicalrecord.h>…

カスタムイニシャライザMemo

- (id)initWithDict:(NSDictionary *)dict { self = [super init]; if (self) { self.content = dict[@"content"]; self.name = dict[@"name"]; } return self; }

Protocolのスパイク

// SNSPost.h #import "CustomModel.h" @protocol hogeDelegate <NSObject> @required - (void)fuga; @end @interface SNSPost : CustomModel @property (nonatomic, weak) id <hogeDelegate>delegate; - (void)hoge; @end // SNSPost.m #import "SNSPost.h" @implementation SNSPost</hogedelegate></nsobject>…

typedef with enum

typedef NS_ENUM(NSInteger, HogeState) { HogeStateStart, HogeStatePause, HogeStateEnd };

KVO

あるオブジェクトのプロパティが変更されたことを検知できる. 非同期でネットからデータ持ってきてうんぬんかんぬんするときに便利. static char LoadTwitterIconUrlKVONotification_Dictionary; -(void)updateIconURL{ // KVO登録 [self addObserver:self f…

dispatch async で main threadを指定して実行する.

//バックグラウンド実行 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ //ネットワークとかの重い処理を書く //ここにUIをいじる処理を書いた事によってステータスバーがチカチカしたりおかしくなった }); //メインス…

make weak self with typeof

__block typeof(self) weakSelf = self; Class Nameを直接指定するかわりに typeofがつかえる. 勉強会で教えてもらった. typeof使うとコピペできる. だがしかし, ブレークポイントでステップ実行する際 この行が別スレッドで 2度くらい 実行されているような…

メモNSArrayのリテラル記法から NSMutableArrayを作る

NSArray* array = @[] NSMutableArray* array = @[].mutableCopy;

UIButtonを押下時にハイライトさせない

次のように書けば良い. btn.adjustsImageWhenHighlighted = NO; ヘッダファイルを以下に示す. @property(nonatomic) BOOL adjustsImageWhenHighlighted; // default is YES. if YES, image is drawn darker when highlighted(pressed) @property(nonatomic) …

[ios] Objective-C の BOOL型は int型でどのように定義されているのか

Objective-C の BOOL型はint型で以下のように定義されている. YES: 1 NO: 0 objc.h ヘッダファイルにもそのように定義されている. 忘れたら BOOLの定義を ctrl+gで見れば良い. objc.hでの定義内容を以下に示す. /// Type to represent a boolean value. type…

.pch ファイルで NSStringWithFormat を使う

.pch ファイルで NSStringWithFormat を使うことができる. URLを指定するときに便利 #define BASE_URL @"http://localhost:3000/" // 各機能での接続先URL #define URL_SETTINGS [NSString stringWithFormat:@"%@%@", BASE_URL, @"v1/settings.json"] #defin…

UINavigationBarに一括で画像をあてる

AppDelegate.mで以下のように書けば. アプリ内のすべてのナビゲーションバーに適用される. // Design UIImage *navigationBarImage = [UIImage imageNamed:@"topbar"]; [[UINavigationBar appearance] setBackgroundImage:navigationBarImage forBarMetrics:…

UIAlertView

BlocksKit を使うとデリゲート書かなくて済む. 読みやすい. アラート出すだけなのにデリゲート書く必要があるのはやっぱり大げさだなぁ. UIAlertView *al = [UIAlertView alertViewWithTitle:@"OK?"]; [al addButtonWithTitle:@"OK" handler:^{ [self.naviga…

SubViewsをすべて消す

テーブルビューのセルでよく使います NSLog(@"before : %@", [cell.contentView subviews]); for (UIView *view in [cell.contentView subviews]) { [view removeFromSuperview]; } NSLog(@"after : %@", [cell.contentView subviews]);

UITabBarControllerの使い方

AppDelegate.m の中で, こんな感じで書けば良い self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; _tabBarController = [UITabBarController new]; _homeViewController = [HomeViewController new]; _postViewController =…

Objective-C でマルチスレッドプログラミング

マルチスレッド処理のやり方がいくつかあるが、それぞれ試してみた。 GCDが最近の書き方らしいけど、まだまだgithubに上がっているライブラリをみると NSOperationを使っていたりするので、ひと通りやってみました。 // part1 シンプルなパターン [self perf…

CGRect などをNSLogで出力するときに便利な関数

CGRect などをNSLogで出力するときに便利な関数たち NSStringFromCGAffineTransform(<#CGAffineTransform transform#>); NSStringFromCGPoint(<#CGPoint point#>); NSStringFromCGRect(<#CGRect rect#>); NSStringFromCGSize(<#CGSize size#>);

gem shenzhenで ターミナルからアプリをビルドしtestflightを投げる

iphone アプリのビルドとテストフライトの配布をコマンドラインで行なってくれる shenzhen という gemがあります。 日本語情報が見当たらなかったので、記事にしてみました。ちょっとしたハマりポイントがいくつかありました。 ちなみに shenzhen という名称…

NotificationCenter

// pchファイルで通知を定義 #define notification @"notification" // Notification 送信 NSNotification *notification = [NSNotification notificationWithName:HideResultViewNotification object:self]; [[NSNotificationCenter defaultCenter] postNot…

JSFlatButtonの使い方

JSFlatButtonという大好きなObjective-C のライブラリがありまして、それの使い方です。 // ボタン JSFlatButton *button = [[JSFlatButton alloc]initWithFrame:CGRectMake(0, 100, 320, 50)]; button.buttonBackgroundColor = [UIColor colorWithRed:0.74f…

ボタンに影をつける

button の layerに setShadow系のメソッドを呼べば良い。 - (void)addShadow:(UIButton*)button { [button.layer setShadowColor:[[UIColor blackColor] CGColor]]; [button.layer setShadowOffset:CGSizeMake(0, 3)]; [button.layer setShadowOpacity:0.925…

透明なモーダルビューを自作する

こんな感じ。MyViewControllerは表示したいものを指定。windowに addSubviewする。 MyViewController *vc = [[MyViewController alloc]init]; AppDelegate *delegate = (AppDelegate *)[UIApplication sharedApplication].delegate; [delegate.window addSub…

ブロック変数を定義する

NSString* (^test)(NSString*, NSString*) = ^(NSString* head, NSString* tail){ return [NSString stringWithFormat:@"%@%@", head, tail]; }; NSLog(@"%@", test(@"hoge", @"fuga"));

Sending 'void' to parameter of incompatible type 'void (^)()'

Sending 'void' to parameter of incompatible type 'void (^)()'引数を取らないブロックをとるメソッドに対して、引数を持つブロックを引数として与えたら発生した。

First Responder を取得する

First Responder とはフォーカスが当たっているUIViewのこと。 キーボード入力などの 画面タップ以外の イベントを受け取る UIViewになる。 UIWindow *window = [[UIApplication sharedApplication] keyWindow]; UIView * firstResponder = [window performS…

聖剣伝説2のようなUIがカッコいいiPhoneゲームiPokeMon

iPokeMonはGPS情報を利用したポケットモンスターのようなゲームで、実際の町、国で異なるポケモンが出現し、捕まえることができる。このゲームは 去年 Kjuly さんが大学の卒業プロジェクトとして開発し、実際にアップルに申請した。 しかし、コピーライトの…

cocoapodで platform のバージョン指定

AFNetworking (1.1.0) is not compatible with iOS 4.3 というエラーがでた Podfileを以下のように修正したら直った platform :ios, '5.0' pod 'AFNetworking'

Objective-Cのエラーメッセージメモ

unrecognized selector sent to instance 不正な引数が オブジェクトに渡された

Objective-C で Method定義

メソッド定義とその呼出し。 ここでは、viewCon.h and .mを編集する hogeController.h (void)hello; (void)al: (NSString*)str; hogeController.m -(void)hello{ printf("hello world\n"); } -(void)al:(NSString *)str{ UIAlertView *a = [[UIAlertView all…

xcode のショートカットキー

Cmd + shift + O クラス名で『素早く開く」Ctrl+Cmd+Up/Down .hファイルと.mファイルの切り替えCtrl+Cmd+Left/Right 以前/次のファイルをひらくCmd+任意のシンボルをクリック クリックしたシンボルが定義された所を開くCmd+[ インデントを上げるCmd+]…

Objective-Cのデリゲートについて調べました。

Objective-Cのデリゲートについて調べました。 デリゲートとは、他のオブジェクトから仕事を任されるオブジェクトのこと。つまり、c#でいえば、イベントコールバック 一般に、delegateはプロパティとして宣言される。こんな感じ。 @property (assign) id del…

Objective-C調べたことメモ カテゴリ編

カテゴリの使用カテゴリを使うと、以下のことが可能になる。 既存のクラスへのメソッド追加 クラスのファイル分割 以下の例では、NSStringクラスにSuzuというカテゴリを追加し、Hoge(), lengthAsNumber()メソッドを追加している。メソッドは追加できるけど、…

Objective-C調べたことメモ メモリ管理編

雑然としたメモです。以下の場合、エラーではなくコールされないだけ。 LLのようにObjectiv-Cでは、動的にメソッドがあるかをチェックしている。 hを宣言しない場合はエラーになる。 Hoge *h = nil; [h method];また、NSStringなどの開放してはいけないオブ…