使我的应用程序[NSMutableArray1 removeAllObjects]iphone sdk崩溃
我使用此代码检查NSMutableArray中是否存在任何对象 如果是,我将它们全部删除,但它会崩溃,尽管有对象为什么使我的应用程序[NSMutableArray1 removeAllObjects]iphone sdk崩溃,iphone,nsmutablearray,Iphone,Nsmutablearray,我使用此代码检查NSMutableArray中是否存在任何对象 如果是,我将它们全部删除,但它会崩溃,尽管有对象为什么 if([NSMutableArray1 count]==1) { [poemoptionslist removeAllObjects]; } if ([NSMutableArray1 count]==0) { [poemoptionslist addObject: final1]; } 控制
if([NSMutableArray1 count]==1)
{
[poemoptionslist removeAllObjects];
}
if ([NSMutableArray1 count]==0)
{
[poemoptionslist addObject: final1];
}
控制台输出
2010-10-18 03:42:13.166
app1[33398:207]*终止应用程序
由于未捕获的异常
“NSInternalInconsistencyException”,
原因:'-[\uu\nsfarray
removeObjectAtIndex::变异方法
发送到不可变对象的
*第一次抛出时调用堆栈:(0 CoreFoundation0x02e55b99异常预处理+185 1 libobjc.A.dylib
0x02fa540e objc_异常_抛出+47 2核心基金会
0x02e0e238+[N异常 raise:格式:arguments:+136 3
CoreFoundation
0x02e0e1aa+[N异常 加薪:格式::+58 4
CoreFoundation
0x02e4d3c1-[\uu\NSCFArray removeObjectAtIndex:+1935
CoreFoundation
0x02dfe973-[NSMUTABLEARRY 移除所有对象]+83 6
爱情诗
0x0004dc8d-[提交OEM提交OEM:]+ 18560 7 UIKit
0x003b77f8-[ui]应用程序 发送操作:发送到:从:forEvent:+119 8 UIKit
0x00442de0-[UIControl 发送操作:发送到:forEvent:+679
UIKit
0x00445262-[UIControl(内部) _SendActionsForvents:withEvent:+527 10 UIKit
0x00443e0f-[UIControl touchesEnded:withEvent:+458 11 UIKit
0x003db3d0-[UIWindow _sendTouchesForEvent:+567 12 UIKit
0x003bccb4-[UIApplication sendEvent:] +447 13 UIKit 0x003c19bf _UIApplicationHandleEvent+ 7672 14图形服务
0x033e6822紫风回拨+1550 15核心基金会
0x02e36ff4 __CFRUNLOOP\u正在调用\u OUT\u以执行\u SOURCE1\u函数 +52 16 CoreFoundation 0x02d97807__CFRunLoopDoSource1+215 17核心基金会
0x02d94a93 uu CFRunLoopRun+979 18 CoreFoundation
0x02d94350 CFRunLoopRunSpecific+208 19核心基金会
0x02d94271 CFRUNLOOPSRUNINMODE+97 20 图形服务
0x033e500c GSEventRunModal+217 21 图形服务
0x033e50d1 GSEventRun+115 22 UIKit 0x003c5af2 UIApplicationMain+1160 23首爱情诗
0x00002728 main+102 24 poemsoflove 0x000026b9启动+53 25???
0x00000001 0x0+1)终止调用 在抛出一个 “NSException”程序接收信号: “西格伯特” 伙计们,这里没什么不安全的 我保存到NSUSerdefaults,如下所示:
mutable1 = [[NSMutableArray alloc] init];
[mutable1 addObjectsFromArray:[prefs1 objectForKey:@"favorites"]];
如果([mutable1计数]==0)
{
[mutable1 addObject:final1];
}
NSUserDefaults *list =[NSUserDefaults standardUserDefaults];
[list setObject:mutable1 forKey:@"favorites"];
[list synchronize];
我像这样加载数据
NSUserDefaults *prefs1 =[NSUserDefaults standardUserDefaults];
if ( [prefs1 objectForKey:@"favorites"] != nil)
{
mutable1 = [[NSMutableArray alloc] init];
mutable1 = [prefs1 objectForKey:@"favorites"];
我得到了这些东西!然后,当它运行removeallobjects时,它会崩溃 您将NSMutableArray1设置为NSArray的实例,而不是NSMutableArray,或者您将NSMutableArray1声明为NSArray vs.NSMutableArray类型的属性
此外,您还应该遵循Cocoa/Objective-C命名约定。即,类名以大写字母开头;变量的形式为myArray1(或更具描述性的形式,最好)。您将NSMutableArray1设置为NSArray的实例,而不是NSMutableArray,或者将NSMutableArray1声明为NSArray vs.NSMutableArray类型的属性
此外,您还应该遵循Cocoa/Objective-C命名约定。即,类名以大写字母开头;变量的形式为myArray1(最好是更具描述性的形式)。错误消息表示您正在将消息发送到不可变数组,这会引发异常。未捕获的异常会导致程序终止 如何创建阵列?导致这种情况的最常见错误是:
[mutableArray copy]
即使您正在复制的东西是可变的,该副本也将是不可变的。在随机选择的示例中,使用mutableCopy insted。错误消息表示您正在将消息发送到不可变数组,这会引发异常。未捕获的异常会导致程序终止
mutable1 = [[NSMutableArray alloc] init];
mutable1 = [prefs1 objectForKey:@"favorites"];
如何创建阵列?导致这种情况的最常见错误是:
[mutableArray copy]
即使您正在复制的东西是可变的,该副本也将是不可变的。在随机选择的示例中,使用mutableCopy insted
mutable1 = [[NSMutableArray alloc] init];
mutable1 = [prefs1 objectForKey:@"favorites"];
即使您已将mutable1声明为NSMutableArray,也将其重新分配给NSUserDefaults对象返回的对象。此对象显然是NSArray而不是NSMutableArray,因此发生了崩溃
通过执行以下操作,可以使用preferences数组加载NSMutableArray:
mutable1 = [[NSMutableArray alloc] init];
[mutable1 addObjectsFromArray:[prefs1 objectForKey:@"favorites"]];
即使您已将mutable1声明为NSMutableArray,也将其重新分配给NSUserDefaults对象返回的对象。此对象显然是NSArray而不是NSMutableArray,因此发生了崩溃
通过执行以下操作,可以使用preferences数组加载NSMutableArray:
mutable1 = [[NSMutableArray alloc] init];
[mutable1 addObjectsFromArray:[prefs1 objectForKey:@"favorites"]];
你能发布更多关于坠机的信息吗?消息、堆栈跟踪等?您可能希望
[NSMutableArray1 count]>=1
,因为==1只是检查是否有1且只有1。您能否显示如何声明“poemoptionslist”?您能否发布有关崩溃的更多信息?消息、堆栈跟踪等?您可能希望[NSMutableArray1 count]>=1
,因为==1只是检查是否有1且只有1。您能展示一下您是如何声明“poemoptionslist”的吗?非常感谢,我花了数小时研究这个问题!除了分配一个全新的“可变1”,还有其他方法吗。类似于mutable1=[prefs1 objectForKey:@“收藏夹”]代码>我们这里不需要alloc。。我尝试了mutable1=(NSMutableArray*)[prefs1 objectForKey:@“favorites”]代码>但失败:(当然,如果首选项@“favorites”实际上是一个数组,您不需要修改它,请使用NSArray*faves=[prefs1 ArrayWorkey:@“favorites”];
。非常感谢您,我花了几个小时研究这个问题!有什么问题吗