不兼容的指针类型将'NSString *'发送到'NSInteger *'类型的参数(又名'int *')

时间:2012-05-15 22:49:00

标签: iphone objective-c xcode4

我有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];

哪里错了? 谢谢 坦率

2 个答案:

答案 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:::,其中包含三个参数pathDBid_citytype。这可能不是你想要的,也可能不是那些需要查看你的代码的人。 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::的方法,它们都包含一个未命名的参数,并且这些用于邮件转发。