ios - 如何将核心数据对象同步到 Objective C 中的 Web 服务

标签 ios objective-c xcode core-data

我是 iOS 的新手,我面临着将核心数据与 Web 服务同步的问题。我的网络服务是这样的

POST /webservice.asmx HTTP/1.1
Host: Url
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://tempuri.org/Method"

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <Method xmlns="http://tempuri.org/">
      <key1>int</key1>
      <key2>long</key2>
      <key3>long</key3>
      <key4>long</key4>
      <key5>long</key5>
      <key6>long</key6>
      <key7>long</key7>
      <key8>long</key8>
      <key9>long</key9>
    </Method>
  </soap:Body>
</soap:Envelope>

这是我在核心数据中保存数据的方式

   NSManagedObjectContext *context = [self managedObjectContext];

                if (self.device) {
                    // Update existing device
                    [device setValue:Audit forKey:@"Key1"];
                    [device setValue:MethodID forKey:@"Key2"];
                    [device setValue:CheckPointID forKey:@"Key3"];
                    [device setValue:GlobalStringChk forKey:@"Key4"];
                    [device setValue:RegionID forKey:@"Key5"];
                    [device setValue:BranchID forKey:@"Key6"];
                    [device setValue:SiteID forKey:@"Key7"];
                    [device setValue:AuID forKey:@"Key8"];
                    [device setValue:userid forKey:@"Key9"];

                } else {
                    // Create a new device
                    NSManagedObject *newDevice = [NSEntityDescription insertNewObjectForEntityForName:@"Entity Name" inManagedObjectContext:context];
                    [newDevice setValue:Audit forKey:@"Key1"];
                    [newDevice setValue:MethodID forKey:@"Key2"];
                    [newDevice setValue:CheckPointID forKey:@"Key3"];
                    [newDevice setValue:GlobalStringChk forKey:@"Key4"];
                    [newDevice setValue:RegionID forKey:@"Key5"];
                    [newDevice setValue:BranchID forKey:@"Key6"];
                    [newDevice setValue:SiteID forKey:@"Key7"];
                    [newDevice setValue:AuID forKey:@"Key8"];
                    [newDevice setValue:userid forKey:@"Key9"];
                }



                NSError *error = nil;
                // Save the object to persistent store
                if (![context save:&error]) {
                    NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]);
                }

 NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
            NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Entity Name"];
            self.devices = [[managedObjectContext executeFetchRequest:fetchRequest error:nil] mutableCopy];

这就是我通常使用代码将数据发布到网络服务的方式

    -(void)serverconnectionPost{

        NSString *MethodString =@"?op=Method";
        NSString *ServerfullString =[NSString stringWithFormat:@"%@%@",ServerString,MethodString];

        int auid=0;
        long regionid=[RegionID longLongValue];
        long branch=[BranchID longLongValue];
        long site=[SiteID longLongValue];
        long auditnameid=[AuditNameId longLongValue];
        long checkpoint=[CheckPointID longLongValue];
        long methodofmeasume=[MethodID longLongValue];
        long rdbchecklist=[RDBIDCheckListID longLongValue];
        long UserId=[userid longLongValue];

        NSString *soapMessage = [NSString stringWithFormat:@"<?xml version=\"1.0\" encoding=\"utf-8\"?>"
                                 "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"
                                 "<soap:Body>"
                                 "<Method xmlns=\"http://tempuri.org/\">"
                                 "<Key1>%d</Key1>"
                                 "<Key2>%ld</Key2>"
                                 "<Key3>%ld</Key3>"
                                 "<Key4>%ld</Key4>"
                                 "<Key5>%ld</Key5>"
                                 "<Key6>%ld</Key6>"
                                 "<Key7>%ld</Key7>"
                                 "<Key8>%ld</Key8>"
                                 "<Key9>%ld</Key9>"
                                 "</Method>"
                                 "</soap:Body>"
                                 "</soap:Envelope>",auid,regionid,branch,site,auditnameid,checkpoint,methodofmeasume,rdbchecklist,UserId];

        NSData *postData = [soapMessage dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];

        NSString *postLength = [NSString stringWithFormat:@"%lu",(unsigned long)[soapMessage length]];
        NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
        [request setURL:[NSURL URLWithString:ServerfullString]];
        [request setHTTPMethod:@"POST"];
        [request addValue: @"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
        [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
        NSLog(@"URL = %@",request);
        [request setHTTPBody:postData];
        myNSUConnectionPOSTObj = [[NSURLConnection alloc] initWithRequest:request delegate:self];
        NSLog(@"Connection link =%@",myNSUConnectionPOSTObj);
        if(myNSUConnectionPOSTObj) {
            myNSMDataFromPOSTServer =[[NSMutableData alloc] init];
            NSLog(@"Connection Successful");

        } else {
            NSLog(@"Connection could not be made");
        }
    }

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
 [myNSMDataFromPOSTServer setLength:0];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
[myNSMDataFromPOSTServer appendData:data];
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection{
 NSXMLParser *myNSXMLParserPostObj=[[NSXMLParser alloc]initWithData:myNSMDataFromPOSTServer];
        myNSXMLParserPostObj.delegate=self;
        [myNSXMLParserPostObj parse];
        NSLog(@"%@",myNSXMLParserPostObj.parserError);
        NSString *responseStringWithEncoded = [[NSString alloc] initWithData: myNSMDataFromPOSTServer encoding:NSUTF8StringEncoding];
        //NSLog(@"Response from Server : %@", responseStringWithEncoded);
        NSAttributedString * attrStr = [[NSAttributedString alloc] initWithData:[responseStringWithEncoded dataUsingEncoding:NSUnicodeStringEncoding] options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes:nil error:nil];
        serverResponse.attributedText = attrStr;
        NSString *Str =serverResponse.text;
        NSLog(@"Server Response =%@",Str);
        alert3 = [[UIAlertView alloc] initWithTitle:@"Message to display"
                                            message:Str
                                           delegate:self
                                  cancelButtonTitle:@"OK"
                                  otherButtonTitles:nil];

        [alert3 show];
}
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
  myMutableStringPOSTObj=[[NSMutableString alloc]initWithString:string];
    NSLog(@"Array String: %@",myMutableStringPOSTObj);
    NSData *dataPost = [myMutableStringPOSTObj dataUsingEncoding:NSUTF8StringEncoding];
    responsePOSTdict = [NSJSONSerialization JSONObjectWithData:dataPost options:0 error:nil];
    NSLog(@"JSON DATA = %@",responsePOSTdict);
}

-(IBAction)joinbtnClick:(id)sender
{
    [self serverconnectionPost];
}   

注意 - ServerString 包含 Web 服务的 url。

我需要将一个值与 Web 服务同步,然后将其从核心数据中删除,然后将另一个值同步,就像同步一样。

如何将核心数据同步到网络服务。有人这样做过吗?提前致谢!

最佳答案

您可以使用AFNetworking 框架来处理所有与网络相关的操作,无论是解析JSON 数据还是XML 数据。要解析 XML 数据,您可以查看 this回答。

有关 AFNetworking 的更多信息,请参阅 this .

编辑: 关注this教程以了解如何将核心数据发布到服务器。

关于ios - 如何将核心数据对象同步到 Objective C 中的 Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41163456/

相关文章:

ios - UITextField 货币格式从左到右

ios - 如何获取 Xcode 服务器代码覆盖率 api JSON 响应

objective-c - UISearchDisplayController autorelease 如何在不同的 View Controller 中导致崩溃?

ios - Xcode 工作区文件为空

ios - 阴影仅在左侧和上侧 mask 边界。是什么原因造成的?

ios - 在 Swift 4 中从 InputStream 中准确读取 n 个字节

ios - 如何查询整个 Realm 数据库中的特定数据,而不仅仅是特定字段或属性

iphone - Objective-C 和 ASIHTTPRequest - 响应字符串问题

objective-c - react 性 NSMutableDictionary?

ios - 如何从应用扩展中的 URL 加载图像?