NSDictionary中的nil对象

时间:2015-09-30 22:26:10

标签: ios objective-c nsdictionary

我有一个NSDictionary,我在代码中用两种不同的方法读取了一些值,但只有一种方法才能正确检索键的值,而在另一种方法中我总是为零。

这是有效的方法:

-(void)drawDriver:(NSString*)driverId withPosition:(CLLocationCoordinate2D)position withRotation:(float)bearing isAvailable:(BOOL)isDriverAvailable{

    GMSMarker *driverMarker = [driversList objectForKey:driverId];
    if (driverMarker != nil) {
        // do some work
    }
}

并且从另一种方法调用它:

- (void) socketIO:(SocketIO *)socket didReceiveMessage:(SocketIOPacket *)packet
{
    NSMutableDictionary *datos = (NSMutableDictionary*)packet.data;
    NSDictionary *driverId = datos[@"from"];
    NSString *id = [driverId objectForKey:@"id"];

    //gets other values

    NSLog(@"Socket message: driverId: %@, position %f,%f, isAvailable:%d", id, latitude, longitude, isDriverAvailable);

    //Call the first method
    [self drawDriver:id withPosition:position withRotation:bearing isAvailable:isDriverAvailable];

}

这是不起作用的方法(对于driverMarker返回nil):

-(void)updateMapForTripWithDriver:(NSString *)driverId {

    GMSMarker *driverMarker = [driversList objectForKey:driverId];
    if (driverMarker != nil) {
        //do some work
    }
}

这是从这里调用的:

- (void)updateTripWithData:(NSDictionary *)data {

    //This NSDictionary comes from a notification
    NSString *newStatus = [[data objectForKey:@"aps"] objectForKey:@"alert"];

    if ([newStatus isEqualToString:NO_TRIP]) {

    } else if ([newStatus isEqualToString:WAITING_CONFIRMATION]) {

    } else if ([newStatus isEqualToString:DRIVER_ON_THE_WAY]) {

        //Get the driverId and call the other method
        NSString *driverId = [data objectForKey:@"driver_id"];
        [self updateMapForTripWithDriver:driverId];
    }
}

正如您所看到的,两种方法都具有完全相同的代码来检索对象但仍然得到不同的结果。 我能找到的唯一区别是当我在方法上放置一些断点时,这就是我发现的:

在第一种方法中,虽然我将driverId作为NSString传递,但不知怎的,它被读作NSFCNumber并且似乎有效,因为我得到了没有问题的值。

These are the values on the first method

但是在第二种方法中,键被读作实际的NSString,由于某种原因,该方法使得该方法为NSDictionary上存在的对象返回nil。

enter image description here

如何让第二种方法起作用并返回正确的值?

0 个答案:

没有答案