2010-03-23 66 views
1

我正在使用MapKit,并希望能够为每个注释添加(NSString *)itemTag值。我创建了myAnnotiation.m和myAnnotation.h编辑和iPhone SDK框架?

我试着将itemTag添加到myAnnotation.h/m中,但是当我尝试在我的主代码中访问currentAnnotation.itemTag时,它说“在协议中找不到itemID” - 这样我去了MapKit.Framework并进入MKAnnotation.h。我添加了(NSString *)itemID,但是当我将.h文件保存在框架中时,它会更改文件的图标,并且不会与其他所有内容一起跳转。

任何帮助或链接帮助将不胜感激。我甚至不确定我是否在这里的正确道路上,但谷歌搜索“修改iphone sdk框架”并没有太大的变化。

回答

4

你为什么要修改框架?您应该在myAnnotation.h中将itemID定义为属性或实例变量(或两者)。你说currentAnnotation.itemTag 没有工作;为了工作,您需要将itemTag定义为currentAnnotation所属类别的属性。

更改框架的头文件不会重新编译它,所以您将无法使其工作。

编辑:下面是一个例子。

在​​:

@interface MyAnnotation : NSObject <MKAnnotation> { 
    NSString *itemID; 
    // Other instance variables 
} 

@property (nonatomic, retain) NSString *itemID; 

// Class and instance methods. 

@end 

MyAnnotation.m

@implementation MyAnnotation 

@synthesize itemID; 

// Your code here. 

@end 

@property调用定义属性和@synthesize通话将创建getter和setter方法为你(的方法来设置和获取价值itemID)。在MyAnnotation.m中,可以使用self.itemID[self itemID]来获得itemID的值,并且可以使用self.itemID = @"something"[self setItemID:@"Something"]来设置该值。

编辑2:

当你得到currentAnnotation,如果编译器不知道的注释是您MyAnnotation类的实例,也不会知道itemID。所以,首先确保你已经包括这条线在你.m文件的开头:

#import MyAnnotation.h 

那西港岛线确保编译器知道的类。当您使用currentAnnotation,你施放它作为MyAnnotation一个实例,像这样:

(MyAnnotation*)currentAnnotation 

这应该安静下来的警告。

+0

对不起,你能解释一下“Property Variable”的含义吗?我确实有一个itemID的实例变量被定义为NSString * itemID ...我是否需要对此做其他特别的事情?代码实际上正在工作(回复到原始的mapkit.framework),但它给了我相同的警告。 – Chris 2010-03-23 17:43:32

+0

检查编辑。 – 2010-03-23 18:13:13

+0

我已经在myAnnotation.h/m中有。要清楚,我有myAnnotation.h/m和MapViewController.h/m。我想在MapViewController.h/m中使用currentAnnotation.itemID。 根据您的示例以及我已经在代码中看到的内容,我假设我应该在myAnnotation.h/m中定义itemID - 但我仍然收到“在协议中找不到”警告。 – Chris 2010-03-23 18:53:29