NSStringのconst定義に関して(discards qualifiersという警告への対処法)

まず、文字列のインスタンス変数を一つ定義
NSString *hoge;

続いて、文字列の定数を一つ定義

static const NSString *HOGE = @"hoge";

で、代入すると、、、

hoge = HOGE;

以下の警告が出るわけです。

Assigning to 'NSString *hoge' from 'const NSString *HOGE' discards qualifiers

これはなんだといろいろ調べてみたところ、constの定義方法に問題があるとのこと。

NSString * const HOGE = @"hoge";

こう定義すると警告が出なくなります。
ただ、両者がどう違うのかはまだ理解できておらず、要調査。

http://d.hatena.ne.jp/dkfj/20120704/1341381190
http://stackoverflow.com/questions/6828831/sending-const-nsstring-to-parameter-of-type-nsstring-discards-qualifier

こちらの記事に助けていただきました。ありがとうございました。

「clang: error: linker command failed with exit code 1」というエラーへの対処

xcodeで書出しを行った際に

clang: error: linker command failed with exit code 1

というエラーが出たので、備忘録としてメモ。

google先生に聞いてみたところ、このエラーが出るのは必要なframeworkが入っていないケースがまずあるという。
その場合は、「TARGET」→「Build Phase」→「Link Binary With Libraries」から、必要なライブラリを足してあげる事で解決する。

今回の自分のケースでは、特にライブラリを新規に追加するようなことをした覚えがなく、更に調べてみたところ、同じ名前のクラス、変数、メソッドなどが使われている場合に発生するらしい。
また、本来「hoge.h」というファイルをimportするべきなのに、「hoge.m」をimportしているときにもこのエラーが出るらしく、今回はまさにこれ。

#import "hoge.m"

これを

#import "hoge.h"

と直したらエラーが消えました。

http://ken-plus.blogspot.jp/2012/04/duplicate-symbol.html

こちらの記事に助けていただきました。感謝。

Objective-c 備忘録 id型の戻り値とselectorに関して

結構ハマったので、備忘録として。
オブジェクト以外の、値を戻り値とするファンクションがあったとします。

int testValue;

  • (int)test

{
return testValue;
}

こんな感じ。
で、外部からselectorを使用してこのファンクションを実行しようとすると、

int myInt = [testObj performSelector:@selector(test)] intValue];

エラーになってしまうことがあります。
想像なのですが、値が代入されておらずデフォルト値でやり取りする際には大丈夫なようなのですが,

testValue = 1;
return testValue;

みたいな感じで一旦値を代入してから実行するとエラーになります。
おそらくは、performSelectorの戻り値の型が(id)なので、オブジェクトを返してあげないとダメみないです。
NSNumbger *testValue;

  • (NSNumber *)test

{
return testValue;
}

こうやるとエラー出ません。

Objective-C学習 備忘録 001 ファンクションの定義

- (NSString *)myMethod5:(NSString *)argString
myInt:(int)argInt;

↓メソッドの実行例
NSString *result = [test myMethod5:@"test" myInt:5];

上記は、戻り値があって、引数が2つある関数の定義例(実装部分の方ね)。
第2引数の前にある「myInt」は引数ごとに割り当てられるキーワードであり、これも含めて関数名になるとのこと。
冒頭にある-は、何を表しているんだろ。。。

備忘録

少し落ち着いてきたので、Objective-Cのお勉強を再開。
知らない間にXcodeが有料になってました。地味にショックですね、これ。
とりあえず、使っているのがまだiPhone3Gなので、デベロッパー登録はせずにAppStoreで600円で購入ですかね。。。

さて、Objective-Cですが、最初はチンプンカンプンで、ゼロから勉強しようと思っていたのですが、せっかくActionScriptを書いてきて、少しは共通で分かることもあるわけだから、優先的に学習するポイントを決めた方がよい、と思い、メモ。
現状で知らなきゃいけないのは

・ファンクションの定義の方法(書式)
・カスタムクラスの定義
イベントハンドラの設定方法
・デリゲートの詳細
・メモリ開放の決まりごと
・型指定などの書式
・ASにないクラスの特徴

こんなところでしょうかね。
イベント処理に関してはデリゲートしかないと思っていたら、ちゃんとイベントハンドラという概念があるんですね。
このあたりを押さえておいたら、とりあえずはかけるようになるかなあ、と。
まあ完全には程遠いんだろうけど。。。

我が身を振り返るよい機会。

会社に、とてもそりが合わない人がいます。
もともと人付き合いが苦手で、コミュ障といってもいいレベルだと思いますし、社内でいろんな人と喧嘩しすぎて給料下げられたわけですが、その中でも特に「この人だけはだめ!」という人がいます。
ここのところしばらくその人とは接点がなく、かなり安心していたのですが、思いがけず今日、接点ができてしまいました。

内心はとてもウンザリしているわけです。心のなかでは罵詈雑言なわけです。嫌いな人だから。
ただね、少し落ち着いて考えると、そういう態度はよろしくないと、まあ子どもでも分かりますよね。
で、考えてみたわけですよ、なんでその人のことが嫌いなのかをね。

その人の嫌いな部分を上げていくと
・居丈高で、人を見下している
・人に文句をいう割に、自分のことを共有しようとせず、突っ込まれると怒る
・目の前の仕事から平気で逃げる。
・ルックスがキモイ
・態度がでかい
・話題が合わない

こんなところですかね。
で、よーく考えてみると、これって自分の欠点だったりするわけですよ。
自分で自分のこういう所が嫌いだな、と思ってたり、こういうふうにはなりたくない(のになってしまっている)という点だったり。
そこに気づいたときに、ちょっと自分自身のことを見直してみたわけです。
突き抜けて優秀なスキルがあるわけではなく、特に勤勉ということでもなく、文句は多く、怒りやすく、態度がでかく、キモイ。
そうすると、他の人からは自分がああ見えている、ということなのですよね。
そうなると、相手のことを悪くばかりも言えない、そんな暇があるなら自分のことを何とかしろ、となるわけだから。

で、反省するわけです。
自分のことを棚にあげて、人のことを気にしてごめんなさい。すいません。


まあそれでも、罵詈雑言は止まらないわけですが。