2013-04-18 3 views
0

Привет Я получаю следующее сообщение об ошибке из этого кода:EXC_BAD_ACCESS (код = 2, адрес = 0х3)

EXC_BAD_ACCESS (code=2, address=0x3) 

Когда я нажимаю играть я в основном закольцован CFRetain.

Я не могу понять, в чем проблема с этим.

XCode указывает именно на этой линии:

[NSDictionary dictionaryWithObjectsAndKeys:[self getCorrectName:oldController], @"ViewController", sec, @"duration", nil]; 

Я проверил оба значения словаря и они, кажется, чтобы проверить.

enter image description here

- (NSString *)getCorrectName:(UIViewController *)viewController { 
    if (viewController.class == [UINavigationController class]) { 
     UIViewController *vc = [viewController.childViewControllers objectAtIndex:0]; 
     return NSStringFromClass(vc.class); 
    } else { 
     return NSStringFromClass(viewController.class); 
    } 
} 

# pragma mark - UITabBarControllerDelegate 

- (BOOL)tabBarController:(UITabBarController *)tbController shouldSelectViewController:(UIViewController *)viewController { 
    // Tracking which controller will be clicked 
    [[Mixpanel sharedInstance] track:@"tab_clicked" 
          properties:[NSDictionary dictionaryWithObjectsAndKeys: 
             [self getCorrectName:viewController], @"ViewController", nil]]; 

    // Tracking how long was spent on the last controller 
    UIViewController *oldController = [self.childViewControllers objectAtIndex:self.selectedIndex]; 
    if (viewController != oldController) { 
     NSTimeInterval secondsBetween = [self.start timeIntervalSinceNow]; 
     NSInteger sec = -1 * (secondsBetween + 0.5);   // round up and down 
     if (sec > 0) { 
      NSLog(@"Changing controllers from %@, %d seconds", [self getCorrectName:oldController], sec); 
      [NSDictionary dictionaryWithObjectsAndKeys:[self getCorrectName:oldController], @"ViewController", sec, @"duration", nil]; 
      /* 
      [[Mixpanel sharedInstance] track:@"tab_viewed" 
            properties:[NSDictionary dictionaryWithObjectsAndKeys: 
               [self getCorrectName:oldController], @"ViewController", sec, @"duration", 
               nil]]; 
      */ 
      self.start = [NSDate date]; 
     } 
    } 
    return YES; 
} 

Любые идеи?

+0

Это указывает на скребковый указатель. В вашем случае это, вероятно, потому, что вы передаете NSInteger в качестве указателя. (Подсказка: не делайте этого!) –

+1

NSDictonaries не может содержать не-объекты (или они будут разбиваться, когда они попытаются сохранить свое значение). Оберните 'sec' в NSNumber. – CodaFi

+0

Да, несмотря на свой префикс «NS», NSInteger - это * не * класс – borrrden

ответ

Смежные вопросы