这是代码
#import <UIKit/UIKit.h>
#import <CoreGraphics/CGPDFArray.h>
@class Model;
// snip
@interface Dest : NSObject
{
CGPDFArrayRef destArray;
DestKind kind;
}
+ (id)destWithObject:(CGPDFObjectRef)obj inModel:(Model*)model;
- (id)initWithArray:(CGPDFArrayRef)array;
Run Code Online (Sandbox Code Playgroud)
@implementation Dest
+ (id)destWithObject:(CGPDFObjectRef)obj inModel:(PDFModel*)model
{
CGPDFArrayRef array = NULL;
Dest* dest = nil;
// stuff to create array
if (array)
{
dest = [[[Dest alloc] initWithArray:array] autorelease];
<path>/Dest.m:63: warning: passing argument 1 of 'initWithArray:' from incompatible pointer type
}
return dest;
}
Run Code Online (Sandbox Code Playgroud)
很明显,编译器认为该数组与initWithArray:声明的数据不兼容Dest.h.但据我所知,类型是完全正确的.我甚至将声明复制Dest.h并粘贴在其中Dest.m.initWithArray:编译好.添加/删除CGPDFArray.h头文件Dest.h没有任何区别,编译器不认为它是一个int Dest.h.
我有一种感觉,你会遗漏另一个相关的警告 - "警告:多个方法名为'initWithArray:'found".如果我是对的,这就是你遇到的:
该选择器有两种方法签名.NSArray需要一个NSArray*,你的需要一个CGPDFArrayRef.
alloc回报id.这意味着编译器不知道它返回了什么类(是的,编译器很厚).
然后你发送initWithArray:到这个神秘物体.编译器说,"天哪,我不知道这是什么类型的对象,所以我无法确定哪种方法签名是正确的.我会快速旋转,无论我面对的是哪一个我都是我会选." 它选择了NSArray的签名.然后它看着论点并说:"嘿,那不是NSArray!错误!"
快速简便的解决方案是将其更改为[[(Dest*)[Dest alloc] initWithArray:array] autorelease].更好的解决方案是为您的方法选择不同的选择器.
| 归档时间: |
|
| 查看次数: |
1111 次 |
| 最近记录: |