2017-03-02 2 views
2

Ich bekomme "\ n" in einer Websocket/SignalR Antwort und ich kann nicht herausfinden, warum. Ich habe versucht, meinen Datentyp für das Antwortobjekt zu ändern, es als JSON zu analysieren, aber das "\ n" immer noch nicht loszuwerden." n" in Websocket/SignalR-Antwort erhalten?

Wie kann ich dieses "\ n" entfernen und wie jedes andere JSON-Objekt/Antwort behandeln?

-Code als Referenz:

-(void)SignalR{ 

    WebServices *services = [[WebServices alloc] init]; 

    SRHubConnection *hubConnection = [SRHubConnection connectionWithURLString:@"xxx"]; 

    SRHubProxy *proxy = [hubConnection createHubProxy:@"xxx"]; 

    [services callGetSRAlertGroupNames:^(NSMutableArray *alertGroupNameArray){ 
     NSLog(@"SR ALERT GROUP NAMES: %@", alertGroupNameArray); 

     [services callGetSRNotificationGroupNames:^(NSMutableArray *notificationGroupNameArray) { 
      NSLog(@"SR NOTIFICATION GROUP NAMES: %@", notificationGroupNameArray); 

      NSArray *combinedArray=[alertGroupNameArray arrayByAddingObjectsFromArray:notificationGroupNameArray]; 

      // Register for connection lifecycle events 
      [hubConnection setStarted:^{ 

       NSLog(@"Connection Started"); 

       for (NSString *groupName in combinedArray){ 
        [proxy invoke:@"Subscribe" withArgs:@[groupName] completionHandler:nil]; 
       } 

      }]; 
      [hubConnection setReceived:^(NSString *data) { 

       NSLog(@"CONNECTION RECIEVED - %@",data); 

      }]; 
      [hubConnection setConnectionSlow:^{ 
       NSLog(@"Connection Slow"); 
      }]; 
      [hubConnection setReconnecting:^{ 
       NSLog(@"Connection Reconnecting"); 
      }]; 
      [hubConnection setReconnected:^{ 
       NSLog(@"Connection Reconnected"); 
      }]; 
      [hubConnection setClosed:^{ 
       NSLog(@"Connection Closed"); 
      }]; 
      [hubConnection setError:^(NSError *error) { 
       NSLog(@"Connection Error %@",error); 
      }]; 

      [hubConnection start]; 

     }]; 
    }]; 
} 

Abgemeldet Antwort Beispiel:

CONNECTION RECIEVED - { 
    A =  (
     "{ 
\n \"NotificationType\": 1, 
\n \"TelemetryDetails\": { 
\n \"serialNumber\": \"xxx\", 
\n \"name\": \"sf-top\", 
\n \"statusId\": 2, 
\n \"buildVersion\": \"xxx\", 
\n \"securityModeId\": 2, 
\n \"IP\": \"xxx\", 
\n \"priority\": 1, 
\n \"bandwidthUpload\": 0.00, 
\n \"bandwidthDownload\": 0.00, 
\n \"bandwidthInternal\": null, 
\n \"totalBandwidthUpload\": 3107397.00, 
\n \"totalBandwidthDownload\": 8078656.00, 
\n \"totalBandwidthInternal\": null, 
\n \"usage\": \"8078656/3107397\", 
\n \"lastUpdateTime\": \"2017-03-02T16:27:57.1736937Z\", 
\n \"buildVersionUpdatingInProgress\": false, 
\n \"transportType\": 2, 
+1

Aus meiner Erfahrung ist das keine normale Antwort mit Signal R. Es gibt eine Chance, dass Ihr Backend eingerichtet ist, um Ihnen die Informationen zu senden - haben Sie das überprüft, um das auszuschließen? – Kiley

Antwort

1

Einfach.

Sie verwenden können:

data = [data stringByReplacingOccurrencesOfString:@"\n" withString:@""]; 

Aber dieser Trick ist "dirty", weil das Problem offensichtlich von Ihrem Web-Service kommt, denke ich.

EDIT:

Wo ersetzen Sie Vorkommen?

Können Sie mir sagen, was protokolliert?

[hubConnection setReceived:^(NSString *data) { 

     NSLog(@"CONNECTION RECIEVED - %@",data); 
     NSString *newString = [data stringByReplacingOccurrencesOfString:@"\n" withString:@""]; 
     NSLog(@"NEW STRING - %@", newString); 
    }]; 

EDIT 2:

Ok können Sie versuchen, diese Variable außerhalb des Abschluss-Handler hinzuzufügen.

__block NSString *newString; 

Oder Sie können auch diese

[hubConnection setReceived:^(NSString *data) { 

      NSLog(@"CONNECTION RECIEVED - %@",data); 

      [self replaceOccurrences: data]; 

}]; 

- (void)replaceOccurrences:(NSString *)data { 
    NSString *newString = [data stringByReplacingOccurrencesOfString:@"\n" withString:@""]; 
    NSLog("New String = %@", newString); 
} 

versuchen Aber Sie sollten wirklich Backend überprüfen, diese Antwort ist in einem geeigneten Format nicht.

+0

Leider brach es in dieser Zeile und zeigte an, dass es ein Wörterbuch ist. Wenn ich mein Datenobjekt zu einem NSDictionary mache, erhalte ich immer noch das "\ n", wenn ich dieses Wörterbuch protokolliere. Problem kann mit der Art sein, wie die Daten gesendet werden. – arcade16

+0

Diese Anweisung verursacht den folgenden Fehler: - [__ NSDictionaryI stringByReplacingOccurrencesOfString: withString:]: nicht erkannter Selektor, der an Instanz 0x6180002665c0 gesendet wird – arcade16

Verwandte Themen