Objective c removeObjectAtIndex使应用程序崩溃
在.h文件中,我设置了以下行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
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];