妊娠、出産を経て、どうにか子の預け先も決まり先日復職しました。
復職して作業環境を色々構築したことをメモしようと思います。

エディタはなんたってvimだって誰かが言ってたので、これを機にわたしもvimmerになろっということでできるだけvimでテキストの編集をしている次第。

軽くググったら設定ファイルを弄ると良いらしいよってことで、vimのノーマルモードで
:echo $VIM
と入力した時に出てくる場所のvimrcをいじってみようかな?とやってみたところ…

書き込み不可らしいよ?

sudoでやっても何してもだめだったので、もう少し調べてみたら、home直下に「.vimrc」を作ってそこに好き勝手に書き込めば良いそうなので、そうやって幸せになりましたとさ。めでたしめでたし。

こちらのサイトを参照

NSDictionaryのメソッドkeyEnumeratorを使うらしい。

NSDictionary *dictionary = [NSDictionary dictionaryWithObject:@"hoge" forKey:@"fuga"];  
for (id key in [dictionary keyEnumerator]) {  
NSLog(@"Key:%@ Value:%@", key, [dictionary valueForKey:key]);  
}  

なんていうかネタ元サイトに詳しく書いてあります。(白目)

cにはfor each文とか無いのかな。

掲題通り。
普通の?クラスのキャストだと↓こんな感じだけど、NSStringをdoubleとかfloatにキャストしたい場合はどうするんだろう?

CustomUIViewClass *hoge = (CustomUIViewClass *)[self.subviews objectAtIndex:0];  

ググッた結果、NSStringのメソッドdoubleValueを使うらしい。

double hoge = [@"12.345" doubleValue];  

CGFloatやfloatならfloatValue

CGFloat hoge = [@"12.345" floatValue];  

NSStringクラスのヘッダファイルを見たら、他にもintValueとかintegerValueとか色々あったよ。

だんだんObjective-CというかXcodeの気持ちがわかってきた順加です。

UIViewを親クラスとしたカスタムクラスを作って、storyboardに配置したインスタンスに関連付けました。

しかしながら、Xcodeがデフォルトで書いてくれたコードには、ここに初期化処理を書いてねみたいなことが書いてあるのに、そのメソッドが呼ばれる気配がありません。

- (id)initWithFrame:(CGRect)frame  
{  
self = [super initWithFrame:frame];  
if (self) {  
// Initialization code  
NSLog(@"ここだよ");  
}  
return self;
}  

デフォルトのコードの中には、コメントアウトされたdrawRectってメソッドがあるけど、ここに初期化処理を書くのは違う気がする。

よくよく調べてみたところ、storyboardを使った場合には、initWithFrameメソッドは呼ばれず、initWithCoderメソッドが呼ばれるようでした。

なのでinitWithFrameは消してしまって、下記のようにすればOK。

- (id)initWithCoder:(NSCoder *)aDecoder  
{  
self = [super initWithCoder:aDecoder];  
if(self){  
[self myInit];  
}  
return self;  
}  
  
- (void)myInit  
{  
NSLog(@"\(^o^)/");  
}  

UITextFieldのtext内容をUITextViewにどんどん追加していくということをやりたい時。
行数が増えても自動的にスクロールして一番下の行が表示されるようにしたい。

@interface MyViewController ()  
  
@property (weak, nonatomic) IBOutlet UITextField *myTextField;  
@property (weak, nonatomic) IBOutlet UITextView *myTextView;  
  
@end  

UITextViewのtextプロパティを変更する前に、scrollEnabledをNOにしておくところがポイントらしい。

あと、テキストの選択位置(カーソル位置?)にスクロールする機能もあるらしくて、その辺りの設定もしてあげると幸せになるっぽい。

よくわからないけど←

以下は@implementationの中身

  
- (void)viewDidAppear:(BOOL)animated  
{  
  
//予めテキストビューの選択位置を設定  
NSString *viewText = _myTextView.text;  
NSRange range;  
range.location = [viewText length];  
_myTextView.selectedRange = range;  
  
}  
- (void)makeMyText {  
  
_myTextView.scrollEnabled = NO;  
  
NSString *newText = _myTextField.text;  
NSString *oldText = _myTextView.text;  
NSString *modifiedText = [NSString stringWithFormat:@"%@%@n", oldText, newText];  
  
_myTextView.text = modifiedText;  
_myTextField.text = @"";  
  
[self scrollText];  
  
}  
  
- (void)scrollText {  
NSRange range;  
range.location = [_myTextView.text length];  
_myTextView.selectedRange = range;  
_myTextView.scrollEnabled = YES;  
  
CGFloat scrollY = _myTextView.contentSize.height + _myTextView.font.pointSize - _myTextView.bounds.size.height;  
CGPoint scrollPoint;  
  
if (scrollY < 0) {  
scrollY = 0;  
}  
scrollPoint = CGPointMake(0.0, scrollY);  
  
[_myTextView setContentOffset:scrollPoint animated:YES];  
  
}  

あとはテキスト送信時にmakeMyTextメソッドを呼べばOK。

絶賛iOSアプリを初心者開発中。

Thread 1:signal SIGABRT

ってエラーが出た。
コード内のエラーではなくて、ビルドした後、シミュレータで動かしている途中でシミュレータが落ちて、main.mの中に出てくる。

ググったら、原因はコレっていうものではないらしい。
AS3とかでいうところの、
#1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。
っていうアレ状態らしいwww

基本的にイージーミスが原因のことが多いみたい。

今回の場合は、ストーリーボードで配置したインスタンスをコードに接続した時に生成されたコードを消しっぱなしにしたせいだった。

ストーリーボードのコネクションインスペクタから当該部分を削除したら動くようになった。

掲題の件、自分用のメモです。

1.p-listに「View controller-based status bar appearance」を追加して、Valueを「YES」に設定する。
p-listっていうのは、Supporting Filesってフォルダ?に入ってる「.plist」ファイルのことだ。

2.viewControllerに下記のメソッドを追加

- (UIStatusBarStyle)preferredStatusBarStyle  
{  
return UIStatusBarStyleLightContent;  
}  

こちら参考にしました

WordPressの記事IDが連番にならずに飛び飛びで増えていくので、原因を調べたところ、リビジョン管理機能を使っているとそうなっちゃうらしいってことがわかったので、折角だからプラグインを使わずに無効化する方法を調べた。

wp-config.php

/** リビジョン管理を無効にする */  
define(WP_POST_REVISIONS, false);  
  
/** 自動保存の間隔を5日にする(実質の無効) */  
define(AUTOSAVE_INTERVAL, 432000);  

↓このコードよりも前に記述すること

/** Sets up WordPress vars and included files. */  
require_once(ABSPATH . 'wp-settings.php');

また、自動保存の間隔を30日とかすごく長くしたら、表示がおかしくなった。
具体的には「下書きとして保存」や「公開」のボタンが高速で点滅するような感じ。

上記は5日に設定したら治った。

また、タイトルを入力した時に走る自動保存を無効にするために以下のコードをfunctions.phpに追加する。

functions.php

/* 記事のオートセーブを無効 */
function disable_autosave() {
wp_deregister_script('autosave');  
}  
add_action('wp_print_scripts','disable_autosave');

参考サイトはいっぱいあってよくわからなくなったので割愛(ごめんなさい!!)

わたしは、iPhoneの純正カレンダーアプリでGoogleカレンダーを見れるようにしてるのだけど、Googleカレンダーで最近追加したカレンダーが一覧に出てこなくて困ってたのね。

んでGoogle先生にきいてみたら、Google Syncっていうのを使うらしいことがわかった、っていうか、iPhone手に入れた直後の頃に一度やってたのだけど、全く覚えてなかった。てへ☆

ちなみにGoogle Syncはここ。

https://m.google.com/sync/

ここに、iPhoneのSafariでアクセスして、言われた通りにすればいいみたい。

日本語に対応してないようで、言語切り替えをしないと、非対応のブラウザだよ、って言われてムキーってなるので注意。

ところで今回はBlogPressっていうiPhoneアプリから投稿してみました。

かなり以前に手に入れてたんだけど、いまいち使いにくくて放置してた。

バージョンアップしてどう変わったのかな?と思ってやってみたテストだよ。

使いやすくなってる気がするけど、記事入力周りに不具合があるような。

昔、クスールで習った時のメモ書きのコピペを晒す。
意味わかんないなどの苦情は受け付けません。メモなので。

オブジェクト指向の必要性について。

  • 共同開発ができる
  • 使い回しができる

「クラス」とはなんぞ

例えば、as1で1フレ目にコードを書いた場合

  • 仕様変更に弱い(書き換え箇所が多い)
  • 使い回しがしにくい

これらをやりやすくするのがクラス

オブジェクト指向プログラミングとは、
これまで「順序」で考えていたプログラミングを、「物」を主体に考えていく書き方のこと。

構成としては…
物┬動作
 └性質

ここでいう「物」を「クラス」で作る

クラスファイルは拡張子.as
文字コードはUTF-8であること。

動作:メソッド(as1でいうところのファンクション)
性質:プロパティ(as1でいうところの変数)
   コンストラクタ(つまり初期化)

※クラスを使う時の概念は、
ライブラリからMCをステージに配置する概念と同じ。

keyboard_arrow_up