Iphone 将数组中的值设置为零

Iphone 将数组中的值设置为零,iphone,objective-c,ios,xcode,Iphone,Objective C,Ios,Xcode,在我的应用程序中,我使用以下代码将数组的值设置为零: [[records objectAtIndex:prizenotify] setValue:nil forKey:@"marbles"]; NSError *error; [_managedObjectContext save:&error]; //Save 但是,它破坏了我的代码。我的编码正确吗?大理石是一个数字 谢谢 [[records objectAtIndex:prizenotify] setValue:

在我的应用程序中,我使用以下代码将数组的值设置为零:

 [[records objectAtIndex:prizenotify] setValue:nil forKey:@"marbles"];
    NSError *error;
    [_managedObjectContext save:&error]; //Save 
但是,它破坏了我的代码。我的编码正确吗?大理石是一个数字

谢谢

[[records objectAtIndex:prizenotify] setValue:[NSNumber numberWithInteger:0] forKey:@"marbles"];
或者在现代Objective-C中:

[records[prizenotify] setValue:@0 forKey:@"marbles"];

如果您想设置一个类似于nil的值,可以使用
[NSNull null]
将null/nil值插入到像NSArray这样的集合类中。

确保
[records objectAtIndex:prizenotify]
对象是一个NSMutableDictionary。

可以肯定的是,测试:

[[((NSDictionary*)[records objectAtIndex:prizenotify]) mutableCopy] setValue:[NSNumber numberWithInteger:0] forKey:@"marbles"];
如果这一个有效,问题是您只有一个NSDictionary(不可变)

如果您确实有NSMutableDictionary:

  • 如果要将该值设置为零,请调用:

    [[records objectAtIndex:prizenotify]设置值:[NSNumber numberWithInteger:0]forKey:@“大理石”]

  • 如果要从字典中删除“大理石”键,请调用:

    [[records objectAtIndex:prizenotify]removeObjectForKey:@“大理石”]


虽然我会选择肖恩的解决方案(
[NSNull null]
)作为最简单的解决方案,但也有一个类(专门回答您的问题)。以下是概述:

NSPointerArray是一个以NSArray为模型的可变集合,但它 还可以保存空值,可以插入或提取空值(和 这有助于对象的计数)。此外,与传统的 数组,可以直接设置数组的计数。在垃圾桶里 收集的环境,如果您指定了清零弱内存 配置,如果收集了元素,则该元素将替换为NULL 价值观


它仍然毫无预警地崩溃。这是我当前的代码:-(void)alertView:(UIAlertView*)alertView ClickedButtonIndex:(NSInteger)buttonIndex{if(buttonIndex==1){NSLog(@“它起作用”);[[records objectAtIndex:prizenotify]设置值:[NSNumber numberWithInteger:0]forKey:@“大理石”][[records objectAtIndex:prizenotify]设置值:[NSNumber numberWithBool:NO]forKey:@“prizereached”];NSError*error;[\u managedObjectContext save:&error];//save}谢谢!看起来很好。崩溃后你会收到什么错误消息?没有,它只是接收到一个sigbart,调试器上没有任何内容。它直接转到(gdb)。单击gdb的“继续”按钮(图标应该有点像这样:“| |>”)几次之后,它就会打印出一个异常或类似的东西。不管怎样,我在休假。你在评论中发布的代码看起来很好。我想一定是其他原因造成的。你有什么样的崩溃?