lilieのブログ -3ページ目

lilieのブログ

Webサイト、iPhone/Androidアプリの開発エンジニアの備忘録です。

参照引数に少し悩んだので、メモ。

- (void) refferArgMethod:(int *)int1 str:(NSString **)str {
*int1 = 100;
*str = @"after";

}
int baseInt = 10;
NSString *baseStr = @"before";


[self
refferArgMethod
:&baseInt str:&baseStr];
NSLog(@"ing->%d str->%@", baseInt,
baseStr);



→baseIntは100、baseStrはafterになります!

-------------------
objective c iPhone 参照引数

defines presentation context is not available prior to xcode 4.2

このワーニングが出るようになったら、
次の手順で直せます。

1.MainWindow.xibを開く
2.右端のインスペクタビューで、4番目の盾みたいなアイコンをクリック
3.ViewController欄の「Defines Context」をアンチェックする

これだけで直ります。
View内に他のControllerを入れている場合(Navigation Controllerなど)、
こちらも一つ一つ選択して、「Defines Context」をアンチェックしてください。

Core Dataで「Create Source Code to Implement a Custom Managed Object Class」を使って
自動的にObject Classを作ると、Relation Shipオブジェクトに簡単にアクセスできたり、
データオブジェクトを簡単に作ってくれて、とても便利だなと思ってました。

でも、一つ落とし穴があるようです。

データオブジェクトを作ると、
「removeXXXObject:(XXX *)value」とか
「removeXXXs:(NSSet *)values」の二つの関数を自動的に作ってくれるので、
リレーション組んでいる親側オブジェクトでは
この関数を呼ぶだけで自動的に消えるんだなと思ってました。

見た目上は消えます。
ただ、データとしては残ってます。。。

単に親オブジェクトとのリンクを消すだけのようです。
なので、このテーブルへの検索にはひっかかってしまったり、
データの実体は残り続けてしまいます。
当然、データファイル量も増え続けるでしょう。

実体を消すには、従来どおり、「NSManagedObjectContext deleteObject」で消してやる必要があります。