我有2个文件,data.h和data.m,连接db和方法db。 当我实施一个方法时,我有一个警告
* 不兼容的指针类型将'NSString *'发送到'NSInteger *'类型的参数(又名'int ') 这是我的代码。
在data.h中
- (id)initCity:(NSString *)pathDB: (NSInteger *)id_city: (NSString *)type;
- (void)getCity:(NSString *)dbPath:(NSInteger *)id_city;
在data.m
中- (id)initCity:(NSString *)pathDB: (NSInteger *)id_city: (NSString *)type
{
[self getCity:pathDB: id_city: type];
return self;
}
- (void)getCity:(NSString *)dbPath : (NSInteger *)id_city : (NSString *)type { .......
......
}
我在哪里调用我的方法
NSString *mystring = @"string";
dataCity = [[Data alloc] initCity: defaultDBPath: selectedItem :mystring];
NSMutableDictionary *dictionary = [dataCity objectAtIndex:0];
哪里错了? 谢谢 坦率
答案 0 :(得分:3)
首先,NSInteger是一个整数类型,而不是一个对象,所以你不需要指针。
其次,您的方法声明格式不正确。它应该是这样的:
- (id)initCityWithPath:(NSString *)pathDB andId:(NSInteger)id_city andType:(NSString *)type;
- (void)getCityWithPath:(NSString *)dbPath andId:(NSInteger)id_city;
答案 1 :(得分:2)
- (id)initCity:(NSString *)pathDB: (NSInteger *)id_city: (NSString *)type;
此方法的名称为initCity:::
,其中包含三个参数pathDB
,id_city
和type
。这可能不是你想要的,也可能不是那些需要查看你的代码的人。 Objective-C使您能够命名方法的参数,并且任何未命名其参数的方法将始终是可疑的 1 。对于大多数Objective-C开发人员来说,initCity:::
并不是方法的好名称。
其次,初始化方法应始终开始,方法是调用[super init]
并将结果分配给self
。很少有理由不这样做(例如,当你创建自己的根类时)。
第三,你的初始化程序调用{{1}}(另一个可怜的名字),返回getCity:::
并接受两个输入参数,可能还有一个输入/输出或输出参数,这看起来不会初始化你的对象正常。除非它具有输出参数(例如void
),否则很少看到方法以get
开头。在您的情况下,我认为您可能使用了错误的类型,getBytes:length:
是32位平台上的32位整数和64位平台上的64位整数的别名。因此NSInteger
是指向这样一个整数的指针。这很令人困惑,但这与NSInteger *
不同,NSNumber
是类,它封装了像NSInteger
这样的内容。
此处没有任何违法行为,但从上面提供的代码来看,您似乎对Objective-C的基本方面缺乏了解。我建议你阅读一本好书,阅读一些有信誉的教程,并在进行之前先看一下Apple的一些示例代码。
1:对于较旧的运行时,objc/Object.h
中声明的根Object
类有两个名为forward::
和performv::
的方法,它们都包含一个未命名的参数,并且这些用于邮件转发。