日々精進 このページをアンテナに追加 RSSフィード

2012-05-14

[]dropboxサーバで実行し続ける方法 01:09

dropboxを使ってローカルで書いたコードをサーバアップロードしているんだけど、コンソールでログインする度にdropboxを実行したくないのでサーバをログアウトしてもdropboxを実行し続ける方法を捜してみた。

http://d.hatena.ne.jp/ymotongpoo/20110330/1301492145

上記サイトに書いてある方法で出来そう。

2012-05-13

[]バックグラウンドスレッドでUITableViewを更新する 17:46

重い検索処理をバックグラウンドスレッドで実行して、その結果をUITableViewに反映させようとしてはまった。

最初は以下のようにしていたが、これは間違い。

- (void)searchStocks:(id)param{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    while (TRUE) {
        if (self.thread.isCancelled) {
            break;
        }
        if (self.keyWords != nil) {
            StockSearchCriteria *criteria = [[StockSearchCriteria alloc] initWithKeyWords:self.keyWords];
            self.stockSearchPopoverController.tableViewController.stocks = [StockContainer findByCriteria:criteria];
            [self.stockSearchPopoverController.tableViewController.tableView reloadData];
            [self.stockSearchPopoverController.tableViewController.tableView performSelectorOnMainThread:@selector(setNeedsDisplay) withObject:nil waitUntilDone:NO ];
            self.keyWords = nil;
        }
    }
    [pool release];
}

正しくは以下。

- (void)searchStocks:(id)param{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    while (TRUE) {
        if (self.thread.isCancelled) {
            break;
        }
        if (self.keyWords != nil) {
            StockSearchCriteria *criteria = [[StockSearchCriteria alloc] initWithKeyWords:self.keyWords];
            self.stockSearchPopoverController.tableViewController.stocks = [StockContainer findByCriteria:criteria];
            [self.stockSearchPopoverController.tableViewController.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO ];
            self.keyWords = nil;
        }
    }
    [pool release];
}

ポイントは以下。

・UITableViewのreloadDataはメインスレッドで実行しないといけない。そうしないとtableView:cellForRowAtIndexPathが実行されない。

・reloadDataを実行したらsetNeedsDisplayも実行されるっぽい。

2012-05-12

[]全角⇔半角、カタカナ⇔ひらがな変換 14:49

CFStringTransformでできるらしい。

詳細は下記サイト参照。

http://d.hatena.ne.jp/alza/20120419/1334830039

2012-05-11

[]ObjectiveーCで正規表現 13:46

下記のようにやるらしい。後方参照とかどうやるんだろ。

NSString *string = @"1日3食のうち4食はうどんを食べたいと思っている。";
NSRange match = [string rangeOfString:@"[0-9]+食" options:NSRegularExpressionSearch];
if (match.location != NSNotFound) {
  NSLog(@"Found: %@",[string substringWithRange:match]);
} else {
  NSLog(@"Not Found");
}

下記サイトを参考にしました。

http://blog.livedoor.jp/faulist/archives/1561287.html

2012-05-10

[]ObjectiveーCで文字列検索 13:44

http://qiita.com/items/2557

上記サイトによるとlikeのときは括ってはいけないと書いてあるが、やってみたらくくらないとエラーになった。

NSPredicate *predLike = [NSPredicate predicateWithFormat:@"name like[c] '%@'", name];
NSPredicate *predContains = [NSPredicate predicateWithFormat:@"name contains[c] '%@'", name];

LIKEで検索する場合は*をワイルドカードとしてつかえる。

CONTAINSは部分一致。