在Parse.com上保存检索声音

时间:2015-02-27 06:56:39

标签: ios audio parse-platform

我正在尝试在iOS应用程序中下载Parse.com上的一些简短声音文件。 该文件以前使用以下代码保存:

    NSData *soundData = [NSData dataWithContentsOfURL:myURL];
    parse_Sound = [PFFile fileWithName:@"XXYYZZ"
                                  data:soundData];
    [parse_Sound saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
        if (!succeeded) {
                NSLog(@"sound-upload NG”);
        } else {
                NSLog(@"sound-upload OK");
            }];
        }
    }];

在调试控制台上看到消息,它显然有效。 现在我需要运行什么样的代码来检索(下载)声音文件? 我浏览了网络,但没有发现任何清晰的工作。

2 个答案:

答案 0 :(得分:1)

您需要在某个地方保留对该文件的引用(最好是在它所属的PFObject列中。)

如果您没有保留参考信息,那么您将无法检索已经上传的与任何对象无关的文件。

我建议您阅读Parse文档,了解iOS https://www.parse.com/docs/ios_guide#files/iOS

上的文件

答案 1 :(得分:1)

要从服务器获取数据,您需要运行查询以询问该对象,但尚未将上传的文件与任何类中的列相关联。上传PFFile是iOS的两个步骤:

1)将PFFile上传到服务器

2)在回调中将PFFile与数据对象中的列相关联

NSData *soundData = [NSData dataWithContentsOfURL:myURL];
    parse_Sound = [PFFile fileWithName:@"XXYYZZ"
                                  data:soundData];
    [parse_Sound saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
        if (!succeeded) {
                NSLog(@"sound-upload NG”);
        } else {
                NSLog(@"sound-upload OK");

                PFObject *soundStuff = [PFObject objectWithClassName:@"Sounds"];

                soundStuff[@"soundFile"] = parse_Sound;
                [soundStuff saveInBackground];

            }];
        }
    }];

现在要获取数据,您将在Sounds类上运行查询,该类将在soundFile列中包含声音数据:

PFQuery *query = [PFQuery queryWithClassName:@"Sounds"];
[query whereKey:@"someKey" equalTo:@"someValue"];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
  if (!error) {
    // The find succeeded.

    // Do something with the found objects
    for (PFObject *object in objects) {
        NSLog(@"%@", object.objectId);
        PFFile *soundFile = object[@"soundFile"];
        NSData *soundData = [soundFile getData];

    }
  } else {
    // Log details of the failure
    NSLog(@"Error: %@ %@", error, [error userInfo]);
  }
}];

我还没有测试过这些代码,但它至少演示了所需的步骤,应该让你开始。

以下是documentation

中的示例
PFObject *jobApplication = [PFObject objectWithClassName:@"JobApplication"]
jobApplication[@"applicantName"] = @"Joe Smith";
jobApplication[@"applicantResumeFile"] = file;
[jobApplication saveInBackground];

然后获取数据:

PFFile *applicantResume = anotherApplication[@"applicantResumeFile"];
NSData *resumeData = [applicantResume getData];

请注意,fileapplicantResumeFile类的JobApplication列相关联,以便可以在查询中检索文件数据。