2016-11-25 100 views
0

因此,我有一个UITableView,并且每当该应用程序崩溃时数组中没有任何项目。奇怪的是,我有另一个表,当它在数组中没有对象时不会崩溃,并且我为每个表使用几乎相同的代码。这里是我有:由于未捕获的异常'NSRangeException',原因:'*** - [__ NSArrayM objectAtIndex:]:index 0超出空数组界限的应用程序

@implementation FindFBFriendsViewController { 
    NSMutableArray *friends; 
} 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 
    UserFBFriends *fbFriends = [UserFBFriends sharedInstance]; 
    NSLog(@"Hell0 from the fbfriends view, array is %@", fbFriends.userFriends); 
    friends = [[NSMutableArray alloc] initWithArray:fbFriends.userFriends]; 

    IndFBFriend *testFriend = [friends objectAtIndex:0]; 
    NSLog(@"USER Friends: %@", testFriend.fullName); 
} 

-(void)viewWillAppear:(BOOL)animated { 
    [self.fbTableView reloadData]; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return [friends count]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    FBFriendCell *cell = [tableView dequeueReusableCellWithIdentifier:@"friendCell" forIndexPath:indexPath]; 

    if (cell == nil) { 
     NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"FBFriendCell" owner:self options:nil]; 
     cell = [nib objectAtIndex:0]; 
    } 

    IndFBFriend *indexRowFriend = [friends objectAtIndex:indexPath.row]; 
    [cell updateCellWithName:indexRowFriend.fullName profilePicture:indexRowFriend.profPic personFBId:indexRowFriend.fbId]; 

    cell.backgroundColor = [UIColor clearColor]; 
    return cell; 
} 

这里是堆栈:

 
Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty array' 
*** First throw call stack: 
(
    0 CoreFoundation      0x0000000106213d85 __exceptionPreprocess + 165 
    1 libobjc.A.dylib      0x000000010597adeb objc_exception_throw + 48 
    2 CoreFoundation      0x00000001060f1804 -[__NSArrayM objectAtIndex:] + 212 
    3 gif-wrap       0x000000010338dd24 -[FindFBFriendsViewController viewDidLoad] + 340 
    4 UIKit        0x000000010421b984 -[UIViewController loadViewIfRequired] + 1198 
    5 UIKit        0x000000010422193b -[UIViewController __viewWillAppear:] + 120 
    6 UIKit        0x0000000104251750 -[UINavigationController _startCustomTransition:] + 1203 
    7 UIKit        0x0000000104261b9b -[UINavigationController _startDeferredTransitionIfNeeded:] + 712 
    8 UIKit        0x0000000104262d0b -[UINavigationController __viewWillLayoutSubviews] + 57 
    9 UIKit        0x0000000104411503 -[UILayoutContainerView layoutSubviews] + 248 
    10 UIKit        0x000000010413b980 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 703 
    11 QuartzCore       0x0000000109754c00 -[CALayer layoutSublayers] + 146 
    12 QuartzCore       0x000000010974908e _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 366 
    13 QuartzCore       0x0000000109748f0c _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 24 
    14 QuartzCore       0x000000010973d3c9 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 277 
    15 QuartzCore       0x000000010976b086 _ZN2CA11Transaction6commitEv + 486 
    16 UIKit        0x000000010407b72e _UIApplicationHandleEventQueue + 7135 
    17 CoreFoundation      0x0000000106139301 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17 
    18 CoreFoundation      0x000000010612f22c __CFRunLoopDoSources0 + 556 
    19 CoreFoundation      0x000000010612e6e3 __CFRunLoopRun + 867 
    20 CoreFoundation      0x000000010612e0f8 CFRunLoopRunSpecific + 488 
    21 GraphicsServices     0x0000000109204ad2 GSEventRunModal + 161 
    22 UIKit        0x0000000104080f09 UIApplicationMain + 171 
    23 gif-wrap       0x00000001033922ef main + 111 
    24 libdyld.dylib      0x000000010752892d start + 1 
    25 ???         0x0000000000000001 0x0 + 1 
) 
libc++abi.dylib: terminating with uncaught exception of type NSException 

是否有人知道如何解决这个问题呢?

回答

1

你说你自己,当朋友数组为空时会发生这种情况。当您执行以下操作时,您会看到什么结果:

IndFBFriend *testFriend = [friends objectAtIndex:0]; 

-[NSArray objectAtIndex:] throws an exception when you access an index that does not exist;当friends为空时,这就是你所看到的。索引0对于空数组无效。

你还没有发布你的其他代码,但我猜你的其他代码不包含这样的行,所以它不会崩溃。

+0

哈感谢您指出。我补充说,先前测试的NSLog语句,完全忘了把它拿出来。 – hermt2

+0

一般来说,如果您看到异常,请查看关联的消息,因为它通常很有帮助。在这种情况下,您已经知道这是在访问空数组期间发生的,但有两个提示可供您查看:' - [__ NSArrayM objectAtIndex:]:'表示崩溃发生在'-objectAtIndex:' (所以在你自己调用'-objectAtIndex:'的地方进行审计),但更重要的是,如果你看看回溯,你会发现崩溃是由于你的'-viewDidLoad'中的'-objectAtIndex:'(调用堆栈行2和3)。这里只有一个,所以这是问题。 –

1

使用IndFBFriend *testFriend = [friends firstObject];更安全。

相关问题