-[\uu NSArrayI objectforkeydsubscript:]:发送到xcode6 objective-c ios中实例的无法识别的选择器
我正在努力学习objective-c,遇到了一些我无法解决的问题。 我相信这是一个基本的问题,但我是新来的,在中间迷失了。 我有:-[\uu NSArrayI objectforkeydsubscript:]:发送到xcode6 objective-c ios中实例的无法识别的选择器,ios,objective-c,iphone,xcode,viewcontroller,Ios,Objective C,Iphone,Xcode,Viewcontroller,我正在努力学习objective-c,遇到了一些我无法解决的问题。 我相信这是一个基本的问题,但我是新来的,在中间迷失了。 我有: ModelViewController.h ModelViewController.m 附表h 附表m 在ModelViewController.h中 #import <UIKit/UIKit.h> @interface FetchScheduleVC : UIViewController @property (copy, nonatom
- ModelViewController.h
- ModelViewController.m
- 附表h
- 附表m
#import <UIKit/UIKit.h>
@interface FetchScheduleVC : UIViewController
@property (copy, nonatomic) NSMutableArray *myMutableArray;
@end
我稍微简化了代码,但基本流程是一样的。
当我运行此命令并单击按钮调用-(iAction)saveBtn:(UIButton*)sender时,我得到:
-[__NSArrayI objectForKeyedSubscript:]: unrecognized selector sent to instance 0x7fcb61d2fd10
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI objectForKeyedSubscript:]: unrecognized selector sent to instance 0x7fcb61d2fd10'
通过这里的方法发送NSArray时有什么错误吗?正如您声明的myMutableArray和copy semantic一样-
@property (copy, nonatomic) NSMutableArray *myMutableArray;
这将向数组发送一条复制消息,从而生成一个不可变的副本
因此,要在NSMutableArray
上使用上述语义,需要将“setter”方法重写为-
- (void)setArray:(NSArray *)newArray
{
if ( array != newArray )
{
[array release];
array = [newArray mutableCopy];
}
}
上面的setter方法只是将newArray的可变副本的引用分配给数组,这有助于改变对象,从而避免错误。正如您已将myMutableArray的复制语义声明为-
@property (copy, nonatomic) NSMutableArray *myMutableArray;
这将向数组发送一条复制消息,从而生成一个不可变的副本
因此,要在NSMutableArray
上使用上述语义,需要将“setter”方法重写为-
- (void)setArray:(NSArray *)newArray
{
if ( array != newArray )
{
[array release];
array = [newArray mutableCopy];
}
}
上面的setter方法只是将newArray的可变副本的引用分配给数组,这有助于您改变对象,从而避免错误。我只能告诉您代码中发生了什么,而不是发生在哪里,因为您没有发布有问题的代码
objectforkeydsubscript
方法用于NSDictionary
订阅,例如:
NSDictionary *dict = @{ @"key" : @"value" };
NSString *value = dict[@"key"]; // HERE
看起来你在做这样的事情:
for(int i=0; i < 3; i++){
[_myMutableArray addObjects: [NSNumber numberWithInt: i]
}
NSNumber *num = _myMutableArray[@"3"]; // !!!!
for(int i=0;i<3;i++){
[\u myMutableArray addObjects:[NSNumber numberWithInt:i]
}
NSNumber*num=_myMutableArray[@“3”];/!!!!
还有一件事我可以告诉你,这与未初始化的数组无关,因为Objective-C简单地忽略了对
nil
对象的取消引用尝试,而这个异常已经超出了这个范围。我只能告诉你代码中发生了什么,而不是发生在哪里,因为你没有发布有问题的代码
objectforkeydsubscript
方法用于NSDictionary
订阅,例如:
NSDictionary *dict = @{ @"key" : @"value" };
NSString *value = dict[@"key"]; // HERE
看起来你在做这样的事情:
for(int i=0; i < 3; i++){
[_myMutableArray addObjects: [NSNumber numberWithInt: i]
}
NSNumber *num = _myMutableArray[@"3"]; // !!!!
for(int i=0;i<3;i++){
[\u myMutableArray addObjects:[NSNumber numberWithInt:i]
}
NSNumber*num=_myMutableArray[@“3”];/!!!!
还有一件事我可以告诉你,这与未初始化的数组无关,因为Objective-C简单地忽略了对
nil
对象的解引用尝试,而这个异常已经超出了这个范围。在上面的代码中,我忘了包括
_myMutableArray = [[NSMutableArray alloc] init];
虽然我在我的实际代码中有这个
这个问题非常愚蠢。很抱歉这个误导性的问题。希望你忽略这个问题,因为它是由于这样一个粗心的错误
在我的实际代码中,我有重复的变量名,如下所示:
for(int i=0; i < 3; i++){
[_myMutableArray addObjects: [NSNumber numberWithInt: i]
}
NSNumber *num = _myMutableArray[@"3"]; // !!!!
在附表h中
#import <Foundation/Foundation.h>
@interface Schedule : NSObject
@property (strong, nonatomic) NSMutableArray *classArray;
-(void) createClassFromArray: (NSArray *) selectedArr;
@end
#import <Foundation/Foundation.h>
@interface Schedule : NSObject
@property (strong, nonatomic) NSMutableArray *selectedArr;
-(void) createClassFromArray: (NSArray *) selectedArr;
@end
#导入
@接口计划:NSObject
@属性(强,非原子)NSMutableArray*selectedArr;
-(void)createClassFromArray:(NSArray*)选择DARR;
@结束
…非常…粗心的错误。在上面的代码中,我忘了包括
_myMutableArray = [[NSMutableArray alloc] init];
虽然我在我的实际代码中有这个
这个问题非常愚蠢。很抱歉这个误导性的问题。希望你忽略这个问题,因为它是由于这样一个粗心的错误
在我的实际代码中,我有重复的变量名,如下所示:
for(int i=0; i < 3; i++){
[_myMutableArray addObjects: [NSNumber numberWithInt: i]
}
NSNumber *num = _myMutableArray[@"3"]; // !!!!
在附表h中
#import <Foundation/Foundation.h>
@interface Schedule : NSObject
@property (strong, nonatomic) NSMutableArray *classArray;
-(void) createClassFromArray: (NSArray *) selectedArr;
@end
#import <Foundation/Foundation.h>
@interface Schedule : NSObject
@property (strong, nonatomic) NSMutableArray *selectedArr;
-(void) createClassFromArray: (NSArray *) selectedArr;
@end
#导入
@接口计划:NSObject
@属性(强,非原子)NSMutableArray*selectedArr;
-(void)createClassFromArray:(NSArray*)选择DARR;
@结束
…非常..粗心的错误。你在哪里初始化_myMutableArray?_myMutableArray不是一个可变数组。因此你得到了这个崩溃。-1你接受了一个与你的问题无关的答案。这个问题是误导性的,对其他人没有帮助。你在哪里初始化_myMutableArray?_myMutableArray不是一个可变数组。因此你是获取此崩溃。-1您接受的答案与您的问题无关。此问题具有误导性,对其他人没有帮助。@Joon.P这不是异常的原因。@Joon.P这不是异常的原因。