使用NSArray时出现NSInvalidArgumentException

时间:2012-07-24 07:29:58

标签: objective-c ios xcode ios5

我正在为iOS 5开发一个iPhone应用程序,我陷入阵列问题。我有一个我称之为人员的自定义课程。人员由两个阵列组成。一个给男孩,一个给女孩。首先,我想使用另一个类中的方法填充Persons对象,我很确定它的工作原理应该如此。但是,当我要在代码中将数组从Persons对象拆分为单个数组时,它不起作用。感觉就像Persons对象,或者它的数组以某种方式被卡住了。请帮忙。这段代码给我一个错误,看起来像是:2012-07-24 09:29:03.073 PersonApp[4375:f803] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFDictionary Boys]: unrecognized selector sent to instance 0x6ac0fe0'

Persons.h

#import <Foundation/Foundation.h>

@interface Persons : NSObject {
    NSArray *Boys;
    NSArray *Girls;
}

@property (nonatomic, copy) NSArray *Boys;
@property (nonatomic, copy) NSArray *Girls;

@end

PersonsViewController.h

#import <UIKit/UIKit.h>
#import "Persons.h"

@interface PersonsViewController : UITableViewController

@property (nonatomic, strong) Persons *persons;

@end

PersonsViewController.m

#import "PersonsViewController.h"

NSArray *boys;
NSArray *girls;
...................
@synthesize persons;     
...................
Communication *comm = [[Communication alloc] init];    
self.persons = [comm getPersons];
boys = [self.persons Boys];
girls = [self.persons Girls];

2 个答案:

答案 0 :(得分:1)

什么是[comm getPersons]返回?我认为这不是“人物”的对象。试试这个代码。

if ([[comm getPersons] isKindOfClass:[Persons class]])
{
   NSLog(@"Not returning Persons object. So this is the error!");
}

答案 1 :(得分:0)

........我在这里错了,

但你有没有试过像

这样的东西
NSArray *boys = [[[NSArray alloc] initWithArray[[comm getPersons]boys]autorelease];

对不起,自从我上次打开Xcode以来已经有几周了,所以对任何代码错误表示道歉,

您是否正在向NSArray注册/分配内存,执行类似

的操作
NSLog(@"count %d",[[[comm getPersons]boys]count]);

至少应该告诉你boys数组存在,(假设它已经被创建)......

NSLog是你最好的朋友,我也建议学习如何使用调试器。