2011年9月27日火曜日

[iOS]Coredataでデータを取り出すときの注意

Coredataを使用して内容を取り出す時に

value = [[manageObject valueForKey:@"mydata"];

とすると、DBのポインターを引っ張ってきてしまうのようなので
このvalueをreleseするとDBを壊してしまう

value = [[manageObject valueForKey:@"mydata"] description];
descriptionをつけることで文字列で取り出すことができる

数値で取り出したときはintValueを使用する

2011年9月26日月曜日

CoreDataを利用したヘッダーとセクションインデックスの使用法

iOSでTableViewのヘッダーとセクションインデックスを指定するときに、
CoreDataを使用するとコーディングが楽になります。

sectionNameKeyPathに設定したいヘッダー、セクションインデックスを指定する

NSFetchedResultsController *_fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:@"sectionName" cacheName:nil];

ヘッダーの設定
セクションごと文字列を返す


//ヘッダーを設定する
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
    //nameがsectionPathで指定した文字列になる
    return [[[fetchedResultsController sections] objectAtIndex:section] name];
}

セクションインデックスはテーブル作成時に配列で返す

//セクションインデックスを設定する
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {
    NSMutableArray *indexTitleArray = [[[NSMutable Arrayalloc] init] autorelease];

    for (int i = 0; i < [[fetchedResultsController sections] count]; i++) {
        //nameがsectionPathで指定した文字列になる
        NSString *indexString = [[[fetchedResultsController sections] objectAtIndex:i] name];
        [indexTitleArray addObject:indexString];
    }
    return indexTitleArray;
}

2011年9月21日水曜日

OpenOfficeでファイルロック

他に編集しているユーザーがいない、または編集しているのが自分だけなのに

[filename]は次の人が編集のためロックされています。

というメッセージが表示され、
ロックを解除するにはキャッシュファイルを削除する必要がある

コンソール上で
$ defaults write com.apple.finder AppleShowAllFiles TRUE
$ killall Finder
を行い、隠しファイルを表示させる。

対象ファイルと同じフォルダに対象ファイルと似た名前に隠しファイルがあるので削除
これでロックが解除される。

原因は編集中(OpenOfficeでそのファイルを開いている)に対象ファイルをコピーすると、こうなるそうだ

MACで隠しファイルを表示する方法

・表示
$ defaults write com.apple.finder AppleShowAllFiles TRUE
$ killall Finder


・非表示
$ defaults write com.apple.finder AppleShowAllFiles FALSE
$ killall Finder

2011年9月16日金曜日

plistの読み出し書き出し

plistで読み出しNSDictionaryで格納する。

NSDictionaryは非常に便利。

無題ノート
NSMutableDictionary *appDict;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES);
NSString *path = [paths objectAtIndex:0];
path = [path stringByAppendingPathComponent:@"app.plist"];

if ([[NSFileManagerdefaultManager] fileExistsAtPath:path]) {
    NSMutableDictionary *appDict = [NSDictionarydictionaryWithContentsOfFile:path];
    //何かの処理
    [appDict writeToFile:path atomically:YES];
} else {

}