Objective c removeObjectAtIndex使应用程序崩溃

Objective c removeObjectAtIndex使应用程序崩溃,objective-c,nsmutablearray,nsarray,Objective C,Nsmutablearray,Nsarray,在.h文件中,我设置了以下行 NSMutableArray *repArray; 在.m文件中,我放置了以下几行。(我只放置了此ex所需的代码行) -(无效)从数据库中读取数据 { objectsForCharacters=[[NSMutableDictionary alloc]init] sqlite3 *db = [contactAppDelegate getNewDBConnection]; NSMutableString *query = nil; query = [NS

在.h文件中,我设置了以下行

  NSMutableArray *repArray;   
在.m文件中,我放置了以下几行。(我只放置了此ex所需的代码行) -(无效)从数据库中读取数据 { objectsForCharacters=[[NSMutableDictionary alloc]init]

sqlite3 *db = [contactAppDelegate getNewDBConnection];

NSMutableString *query = nil;

query = [NSMutableString stringWithFormat:@"select representative, title, business_name, uid from corporate where profiler_type <> 'OWN_CORPORATE' order by representative asc"];  

const char *sql = [query UTF8String];
sqlite3_stmt *selectAllStmt = nil;

if(sqlite3_prepare_v2(db,sql, -1, &selectAllStmt, NULL)!= SQLITE_OK)
    NSAssert1(0,@"error preparing statement",sqlite3_errmsg(db));
else
{
    repArray = [[NSMutableArray alloc]init];
    businessArray = [[NSMutableArray alloc]init];
    titleArray = [[NSMutableArray alloc]init];
uidArray = [[NSMutableArray alloc]init];

    while(sqlite3_step(selectAllStmt)==SQLITE_ROW)
    {


        char *chrstr =(char *)sqlite3_column_text(selectAllStmt, 0);
        if(chrstr !=NULL)
        {
            corpRepresentative = [NSString stringWithUTF8String:chrstr];
            [repArray addObject:corpRepresentative];
        }       
        chrstr =(char *)sqlite3_column_text(selectAllStmt, 1);
        if(chrstr !=NULL)
        {

            corpTitle = [NSString stringWithUTF8String:chrstr];
            [titleArray addObject:corpTitle];
        }
        chrstr =(char *)sqlite3_column_text(selectAllStmt, 2);
        if(chrstr !=NULL)
        {
            corpBusiness_name = [NSString stringWithUTF8String:chrstr];
            [businessArray addObject:corpBusiness_name];

        }   

        chrstr =(char *)sqlite3_column_text(selectAllStmt, 3);
        if(chrstr !=NULL)
        {
            corporteUid = [NSString stringWithUTF8String:chrstr];
            [uidArray addObject:corporteUid];

        }


    }


}
sqlite3_finalize(selectAllStmt);

sqlite3_close(db);
}

我正在尝试从方法中删除数组元素。如果我执行以下命令,则应用程序会在我的iPod Touch中自动崩溃。但它在模拟器中运行良好,没有任何错误

[repArray removeObjectAtIndex:selectedIndexPath.row];


即使我的数组中有多个元素,这两个元素都会使应用程序崩溃。

当你的应用程序像那样崩溃时,99%的时间你都在试图删除超出数组边界的对象。

错误消息是什么?@Philippe Sabourin我真的不知道如何接受我前面问题的答案。@Benj我没有收到任何错误消息。它在模拟器中运行良好,没有错误。但不是在iPod@dinesh看起来你已经明白了:)83%要好得多。可能是的,但为什么我会有这个问题在模拟器中并不存在。彼得,你能帮我一下吗?我可以尝试-但你需要发布更多的代码-在你创建数组的地方,以及在从数组中删除对象的上下文中发布更多的代码。另外,您是否检查了indexPath.row是否小于数组对象计数?Peter我已经为您上传了其他代码。请看一看。我确信问题出在removeObjectAtIndex中。然后请上传实际相关的代码。应用程序崩溃的整个函数,以及调试器显示的错误消息。
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{



    NSString *tempUID = [uidArray objectAtIndex:indexPath.row];
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
    [prefs setObject:tempUCID forKey:@"corpUcid"];


    [prefs setObject:@"PROFILER" forKey:@"selProfiler"];

    CorpPrevFront *corpPrevFront = [[CorpPrevFront alloc]initWithNibName:@"CorpPrevFront" bundle:nil];
    [self.navigationController pushViewController:corpPrevFront animated:NO];
    [corpPrevFront release];

    [tableView deselectRowAtIndexPath:indexPath animated:NO];



}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
    //FOR VIEW
    if (buttonIndex == 1 && [alertView tag] == 1) {
        // IT WILL BE MATCH ON CorpPrevFront CLASS

    }
     //FOR DELETE
    if(buttonIndex == 2 && [alertView tag] == 1){



    } else if(buttonIndex == 1 && [alertView tag] == 2){
        DeleteProfiler *delProfiler = [[DeleteProfiler alloc]init];

        BOOL del = [delProfiler deleteProfiler:selectedCpUid];
         //[delProfiler deleteProfiler:selectedCpUcid];
        if (del == YES) {


          [repArray removeObjectAtIndex:selectedIndexPath.section];
            [businessArray removeObjectAtIndex:selectedIndexPath.row];
            [titleArray removeObjectAtIndex:selectedIndexPath.row];
            [ucidArray removeObjectAtIndex:selectedIndexPath.row];



        [self.corporateTable reloadData];



                   }


    }
}
[repArray removeObjectAtIndex:selectedIndexPath.row];
[repArray removeObjectAtIndex:0];