0

Parse から画像をダウンロードしようとしていますが、解析からすべての画像をダウンロードし終えると、プログラムが次のエラーでクラッシュします。

NSNull getDataInBackgroundWithBlock:progressBlock:]: 認識されないセレクターがインスタンスに送信されました。

私はいくつかの条件を追加しようとしました

if(![object objectForKey:@"goal_image"]) //If it is nil => exit

しかし、それはまだクラッシュしています。これが私のコードです:

        PFQuery *query = [PFQuery queryWithClassName:@"Goal"];

        [query getObjectInBackgroundWithId:[object objectId] block:^(PFObject *object, NSError *error) {

            if(!error)
            {
                PFFile * imageFile = [object objectForKey:@"goal_image"];
                if (imageFile) {

                    [imageFile getDataInBackgroundWithBlock:^(NSData *data, NSError *error2) {
                        if (!error2) {

                            NSString  *jpgPath = [NSHomeDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"Images/Goals/%@",[object objectId]]];
                            [data writeToFile:jpgPath atomically:YES];

                        }
                    } progressBlock:^(int percentDone) {
                        if (percentDone == 100) {
                            NSLog(@"Download Completed");
                        }

                    }];
                }
            }
        }];
4

2 に答える 2

5

tl;dr

NSNullのチェックとは別に、をチェックする必要がありnilます。

PFFile * imageFile = object[@"goal_image"]; // note the modern Obj-C syntax
if (imageFile && ![image isEqual:[NSNull null]]) {
    ...
}

説明

NSNullは とは異なりnil、最初のものはオブジェクトです。

オブジェクトのみを保持するためNSArray、そのようなコンテナーに格納することはできません。そのため、通常は JSON 応答で返される値を表すために使用されます。NSDictionarynilNSNullnull

へのメッセージの送信nilは暗黙のうちに失敗しますが、認識されないセレクターをNSNullシングルトンに送信するとクラッシュします。

また、辞書にキーが見つからない場合にobjectForKey:返されることも忘れないでください。nil

于 2013-08-21T15:14:37.277 に答える
0

これが古いことは知っていますが、他の誰かがこの問題を抱えている場合に備えて。私にとって、上記の答えはうまくいきませんでした。私にとってうまくいったのは、アプリデリゲートでローカルデータストアを有効にすることでした。正直なところ、これが機能する理由はわかりませんが、共有する必要があると思いました

// Enable Local Datastore
[Parse enableLocalDatastore];
于 2015-06-27T22:14:25.603 に答える