日々精進

新しく学んだことを書き留めていきます

ParseのiOS Guide抄訳5

今のところParseのiOS Guide抄訳はここまで。PushNotificationセクション以降は使うときが来たら訳してみます。

    // デフォルトではキャッシュは無効。cachePolicyに値を渡すと有効になる。
    query.cachePolicy = kPFCachePolicyNetworkElseCache;
    // kPFCachePolicyIgnoreCache:キャッシュ使わない
    // kPFCachePolicyCacheOnly:キャッシュしか使わない
    // kPFCachePolicyNetworkOnly:Readはネットワークだけでやる。Writeはキャッシュにする。
    // kPFCachePolicyCacheElseNetwork:キャッシュにデータがなかったらネットワークにアクセスする
    // kPFCachePolicyNetworkElseCache:ネットワークにアクセスできなかったらキャッシュを使う
    // kPFCachePolicyCacheThenNetwork:まずキャッシュにアクセスし、その後ネットワークにもアクセスする。callbackが二回呼ばれる

    query.hasCachedResult;
    [query clearCachedResult];
    [PFQuery clearAllCachedResults];
    // キャッシュの生存期間を秒単位で指定する
    query.maxCacheAge = 60;

    // countだけ取ってこれる
    [query countObjectsInBackgroundWithBlock:^(int count, NSError *error) {
        if (!error) {
            // The count request succeeded. Log the count
            NSLog(@"Sean has played %d games", count);
        } else {
            // The request failed
        }
    }];

    // orQueryWithSubqueriesで複数のクエリをUnionする
    PFQuery *lotsOfWins = [PFQuery queryWithClassName:@"Player"];
    [lotsOfWins whereKey:@"wins" greaterThan:[NSNumber numberWithInt:150]];
    PFQuery *fewWins = [PFQuery queryWithClassName:@"Player"];
    [fewWins whereKey:@"wins" lessThan:[NSNumber numberWithInt:5]];
    PFQuery *query2 = [PFQuery orQueryWithSubqueries:[NSArray arrayWithObjects:fewWins,lotsOfWins,nil]];
    [query2 findObjectsInBackgroundWithBlock:^(NSArray *results, NSError *error) {
    }];


    // Files セクション
    // PFFileは10MBまでのバイナリデータを保存できる
    NSData *data = [@"Working at Parse is great!" dataUsingEncoding:NSUTF8StringEncoding];
    PFFile *file = [PFFile fileWithName:@"resume.txt" data:data];
    [file saveInBackground];
    // 各ファイルにはユニークなIDが振られるので同じファイル名のファイルを作っても問題ない。
    // 拡張子を元にParseがファイルタイプを判別して何か処理するらしいので拡張子は正しくつけること。

    // PFObjectにPFFileを紐づけることができる
    PFObject *jobApplication = [PFObject objectWithClassName:@"JobApplication"];
    [jobApplication setObject:@"Joe Smith" forKey:@"applicantName"];
    [jobApplication setObject:file         forKey:@"applicantResumeFile"];
    [jobApplication saveInBackground];

    // PFFileをサーバから取得する方法。PFObjectを介して取得する。
    PFQuery *appQuery = [PFQuery queryWithClassName:@"JobApplication"];
    [appQuery getFirstObjectInBackgroundWithBlock:^(PFObject *obj, NSError *error){
        PFFile *applicantResume = [jobApplication objectForKey:@"applicantResumeFile"];
        [applicantResume getDataInBackgroundWithBlock:^(NSData *data, NSError *error){
            // 画像の表示とか
        }];
    }];

    // 画像ファイルは↓のように簡単に保存できる
    UIImage *image = [UIImage imageNamed:@"image"];
    NSData *imageData = UIImagePNGRepresentation(image);
    PFFile *imageFile = [PFFile fileWithName:@"image.png" data:imageData];
    [imageFile save];

    // PFFileへの参照をPFObjectに保存するのを忘れずに
    PFObject *userPhoto = [PFObject objectWithClassName:@"UserPhoto"];
    [userPhoto setObject:@"My trip to Hawaii!" forKey:@"imageName"];
    [userPhoto setObject:imageFile             forKey:@"imageFile"];
    [userPhoto save];

    // プログレスバーの出し方
    NSData *data1 = [@"Working at Parse is great!" dataUsingEncoding:NSUTF8StringEncoding];
    PFFile *file1 = [PFFile fileWithName:@"resume.txt" data:data1];
    [file1 saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
    } progressBlock:^(int percentDone) {
        // プログレスバーの更新処理を書く。percentDoneは0〜100
    }];