Ich benutze die Google Places API, um nach Restaurants in der Nähe zu suchen. Jedes Restaurant wird in einer Zelle in einer UITableView angezeigt. Die Antwortantwort ist im JSON-Format. Von den Dingen, die der JSON enthält, ist eine Dezimalzahl, die die Bewertung des Restaurants darstellt. Ich möchte die Bewertung in den Zellen anzeigen. Allerdings gibt es manchmal keine Bewertung für das Restaurant und der Wert ist (null). Daher habe ich in der cellForRowAtIndexPath-Methode eine Überprüfung hinzugefügt, die überprüft, ob der Wert der Bewertung null ist oder nicht.Tableview stürzt ab, wenn JSON null zurückgibt. Ios
if([dict valueForKey:kResponseRating] != [NSNull null])
{
NSNumber *rating = [dict valueForKey:kResponseRating];
[cell displayRating:rating];
}
else
{
NSLog(@"Value of rating is null");
}
Wenn ich die Anwendung laufen noch die Tableview so schnell abstürzt als ein Nullwert zurückgegeben wird und die Zeichenfolge „Wert der Bewertung ist null“ wird nicht gedruckt. Es geht also nicht in die else-Anweisung, auch wenn der Wert in json null ist.
Ok, also habe ich überprüft, ob der Rückgabewert vom Typ NSString Klasse und nicht ist. Hier ist, was ich in der gleichen Methode gemacht habe:
if([[dict objectForKey:kResponseRating] isKindOfClass:[NSString class]])
{
NSLog(@"The return response is of type NSString");
}
Und es ging nicht in if-Anweisung.
Hier ist die Methode, die die Bewertung berechnet und bucht. Das Verfahren nimmt die Runden auf die nächstfolgende 0,5 und dann zeigt es als Sterne von 5.
-(void)displayRating:(NSNumber*)rating{
double rate = [rating doubleValue];
rate = round(rate * 2.0)/2.0;
int counter = 0;
double compareVar = 1.0;
while(counter <= 4){
if(rate == 0.0)
{
imgRating[counter] = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"starempty.png"]];
[self.contentView addSubview:imgRating[counter]];
}
else
{
if(compareVar < rate)
{
imgRating[counter] = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"starfill.png"]];
[self.contentView addSubview:imgRating[counter]];
}
else if(compareVar == rate)
{
imgRating[counter] = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"starfill.png"]];
[self.contentView addSubview:imgRating[counter]];
}
else
{
if(compareVar - rate == 0.5)
{
imgRating[counter] = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"starhalffill.png"]];
[self.contentView addSubview:imgRating[counter]];
}
else
{
imgRating[counter] = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"starempty.png"]];
[self.contentView addSubview:imgRating[counter]];
}
}
counter++;
compareVar = compareVar + 1.0;
}
}
NSLog(@"This is rate: %f", rate);
}
Ist eine Codezeile in diesem Verfahren einen Absturz verursacht?
dass, wenn sonst Bedingung funktioniert? Ich meine, dass Check NSNull funktioniert oder nicht? –
Ich glaube nicht. Es geht immer in die if-Anweisung, selbst wenn der Wert null ist. Auch eine Sache der JSON gibt eine NULL mit Klammern um, wie (Null). –
Zeigen Sie das vollständige Absturzprotokoll und beenden Sie die Verwendung von 'valueForKey:'. – trojanfoe