2016-12-15 7 views
2

iOSで新しく、コアデータをWebサービスと同期させる際に問題が発生しています。私のWebサービスは、これは私が一般的にウェブサービス対象データでコアデータオブジェクトをWebサービスに同期する方法

-(void)serverconnectionPost{ 

     NSString *MethodString [email protected]"?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]; 
} 

ノートにデータをポストするためのコードを使用する方法です。この

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]; 

のようなものです - ServerStringにはWebサービスのURLが含まれます。

Webサービスと1つの値を同期させてから、それをコアデータから削除してから、syncのような別の値を削除する必要があります。

コアデータをWebサービスに同期する方法。誰でもこれを行った。前もって感謝します!

+0

なぜあなたはデータを投稿するAFNetworkingフレームワークを使用していません?非常にシンプルで、すべての必要なシナリオを処理します。 –

+0

@VishalSonawane私はXMLParsingを使用しており、AFNetworkingはJSON解析用です。私が検索するときにAFNNetworkingがJSON Parsingを受け取るかどうかわかりません。 – Muju

+0

私の答えを確認してください。 –

答えて

0

デバイスにコアデータが含まれている場合は、NSStringを含めることはできません。 NSManagedObjectまたはNSDictionaryのいずれかです。私はそれがNSManagedObjectだと思います。

この場合、それはループ内でオブジェクトとしてNSManagedObjectを使用し、それぞれ9つのキーの値を取得するために、より適しています:

for (NSManagedObject *object in devices) { 

     NSSString *string1 = [object valueForKey:@"key1"]; 
     NSSString *string2 = [object valueForKey:@"key2"]; 
     NSSString *string3 = [object valueForKey:@"key3"]; 
     NSSString *string4 = [object valueForKey:@"key4"]; 
     NSSString *string5 = [object valueForKey:@"key5"]; 
     NSSString *string6 = [object valueForKey:@"key6"]; 
     NSSString *string7 = [object valueForKey:@"key7"]; 
     NSSString *string8 = [object valueForKey:@"key8"]; 
     NSSString *string9 = [object valueForKey:@"key9"]; 
     // use the strings 

//Hear call your method...It will send value one by one to web service. 
    } 
0

AFNetworkingフレームワークを使用して、JSONデータまたはXMLデータを解析する、すべてのネットワーク関連操作を処理できます。 XMLのデータを解析するには、this答えがあります。

AFNetworkingの詳細については、thisを参照してください。

EDIT: フォローthisチュートリアルでは、サーバへのコアデータを掲載についての考えを取得します。

+0

お返事ありがとうございます。私はデータを投稿することができます。コアデータオブジェクトをWebサービスに同期させるためのコードやヒントが必要です。 – Muju

+0

私は自分の答えを更新しました。 –

関連する問題