没有Internet连接时,将POST请求保存到核心数据

时间:2012-02-21 02:39:14

标签: ios core-data asiformdatarequest

我正在尝试开发一个iOS应用程序来保存ASIFormDataRequest(即发布图片,评论等),就像Twitter应用程序如何在其草稿,路径应用程序和Instagram中保存推文一样..

是否可以直接将“ASIFormDataRequest * request”实例保存到Core Data(这是我不知道的类型)

或者我应该根据我想要的表单请求创建不同的实体并保存请求的数据? 例如,

[request setPostValue:@"something"    forKey:@"method"];
[request addPostValue:object1         forKey:@"key1"];
[request addPostValue:object2         forKey:@"key2"];
[request addPostValue:anImageURLPath  forKey:@"key3"];

..并使用请求的帖子值的属性为上述请求创建一个实体?

1 个答案:

答案 0 :(得分:1)

可能最好只保存您想要保留的值。您应该创建实体来存储您的值。

您可以为任何表单值创建一个实体,与另一个实体具有一对多关系 - 这是您拥有的帖子值的简单键/值对

this教程是我用来学习基本CoreData的教程。它将指导您创建实体并在它们之间建立关系

编辑:在评论中回答您的问题:

我认为你有模型(数据类/实体或你称之为的任何东西)来代表'A Post'。我还没有看到你的代码,我不确定你是怎么写的,但这就是我实现它的方法。

1)拥有一个从用户那里获取数据的表单。 (以及代表此形式的模型)

2)用户点击“发送”,将该数据(作为模型)传递给网络服务,网络服务将其转换为FormDataRequest并尝试发送。

3)如果网络出现故障(或者如果用户只是点击“保存草稿”),则会将模型发送到数据服务,该数据服务将模型保存到CoreData。 (创建一个CoreData实体 - 如果与模型不同,它应该是相似的 - 复制值,并保存实体)

as(half)伪代码:P

class MyFormViewController{
    // Obviously declared in the header file ;)
    TextField name;
    TextField dob;
    ...
    // View Stuff dealing with displaying the form
    ...

    function getModelForFieldValues() {
        Model m;
        m.name = name.Text;
        m.dob = dob.Text;
        return m;
    }

    function send_buttonPress() {
        Model myModel = getModelForFieldValues();
        BOOL success = NetworkService.send(myModel); //Attempts to send the data over the network
        if(!success) {
            DataService.save(myModel); //Saves the model data to CoreData
        }
    }

    function saveDraft_buttonPress() {
        Model myModel = getModelForFieldValues();
        DataService.save(myModel);
    }
}