gpt4 book ai didi

ios - 如何修复 NSInvalidArgumentException 和 UncaughtException?

转载 作者:行者123 更新时间:2023-11-29 02:41:35 25 4
gpt4 key购买 nike

请耐心等待,因为我是 Objective-C 语言的新手。我正在尝试初始化 initWithName() 方法,但它不起作用。我不确定为什么当我在这里查看其他答案时,它指出 .m.h 文件必须在使用它们的方法时匹配.不确定问题的根源在哪里。

错误:

2014-09-06 18:14:17.832 NPF-1[3788:60b] -[Park initWithName:location:formed:area:link:]: unrecognized selector sent to instance 0x8dbf6d0
2014-09-06 18:14:17.838 NPF-1[3788:60b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Park initWithName:location:formed:area:link:]: unrecognized selector sent to instance 0x8dbf6d0'

Park.m 文件中的 @implementation Park 表示找不到 initWithName:location:formed:area:link 的方法定义。

.m 文件:

#import "Park.h"

@implementation Park

// implement all getter/setter methods

-(id) init{
/*self = [super init];
if(self){
//initalization code goes here
[self setParkName:parkName]; // calling mutator
[self setParkLocation:parkLocation]; // calling mutator
[self setDateFormed:dateFormed]; // calling mutator
[self setArea:area]; // calling mutator
[self setLink:link]; // calling mutator
}
return self;*/
// init method that will call the designated initializer with default values
return[self initWithName:@"unknown" location:@"unknown" formed:@"unknown" area:@"unknown" link:@"unknown"];
}

-(NSString *) parkName{
return parkName;
}

-(void) setParkName:(NSString *) value{
parkName = value;
}

-(NSString *) parkLocation{
return parkLocation;
}

-(void) setParkLocation:(NSString *) value{
parkLocation = value;
}

-(NSString *) dateFormed{
return dateFormed;
}

-(void) setDateFormed:(NSString *) value{
dateFormed = value;
}

-(NSString *) area{
return area;
}

-(void) setArea:(NSString *) value{
area = value;
}

-(NSString *) link{
return link;
}

-(void) setLink:(NSString *) value{
link = value;
}

// format and prints out all ivars, returning their values
-(NSString *) description{
return [NSString stringWithFormat:@"parkName=%@, parkLocation=%@, dateFormed=%@, area=%@, link=%@",
parkName, parkLocation, dateFormed, area, link];
}

@end

.h 文件:

#import <Foundation/Foundation.h>

@interface Park : NSObject{
// declare ivars
NSString *parkName;
NSString *parkLocation;
NSString *dateFormed;
NSString *area;
NSString *link;
}

// designated initializer
-(id)initWithName:(NSString *)p_name
location:(NSString *)p_location
formed:(NSString *)p_formed
area:(NSString *)p_area
link:(NSString *)p_link;

-(NSString *)parkName; //getter/accessor
-(void) setParkName:(NSString *) value; //setter/mutator

-(NSString *)parkLocation;
-(void) setParkLocation:(NSString *) value;

-(NSString *)dateFormed;
-(void) setDateFormed:(NSString *) value;

-(NSString *)area;
-(void) setArea:(NSString *) value;

-(NSString *)link;
-(void) setLink:(NSString *) value;

// accessor method (getter)
//mutator method (setter)
/*-(NSString *) parkName;
-(void) setParkName:(NSString *) value;

-(NSString *) parkLocation;
-(void) setParkLocation:(NSString *) value;

-(NSString *) dateFormed;
-(void) setDateFormed:(NSString *) value;

-(NSString *) area;
-(void) setArea:(NSString *) value;

-(NSString *) link;
-(void) setLink:(NSString *) value;*/

@end

NPF-1AppDelegate.m 文件:

#import "NPF_1AppDelegate.h"
#import "Park.h" // import the class to use Park object

@implementation NPF_1AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];

// added to test the following class
Park *p1 = [[Park alloc] init];
NSLog(@"p1 is %@", p1);

Park *p2 = [[Park alloc] initWithName:@"Acadia National Park"
location:@"Maine"
formed:@"1919-02-26"
area:@"47,389.67 acres (191.8 square km)"
link:@"TBD"];
NSLog(@"p2 is %@", p2);

return YES;
}

最佳答案

您已经定义了一个方法,但尚未实现它。您的 .m 文件需要实现 initWithName:location:formed:area:link:。像这样的东西:

-(id)initWithName:(NSString *)p_name
location:(NSString *)p_location
formed:(NSString *)p_formed
area:(NSString *)p_area
link:(NSString *)p_link {
self = [super init];
if(self){
//initalization code goes here
[self setParkName:p_name]; // calling mutator
[self setParkLocation:p_location]; // calling mutator
[self setDateFormed:d_formed]; // calling mutator
[self setArea:p_area]; // calling mutator
[self setLink:p_link]; // calling mutator
}
return self;
}

此外,您可能希望将 parkName 等声明为属性而不是 iVar,这样它们就会自动合成——您不必编写所有的 getter 和 setter。

关于ios - 如何修复 NSInvalidArgumentException 和 UncaughtException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25706276/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com