【问题标题】:Editing and iPhone SDK Framework?编辑和 iPhone SDK 框架?
【发布时间】:2010-03-23 16:51:01
【问题描述】:

我正在使用 MapKit,并希望能够为我的每个注释添加一个 (NSString *)itemTag 值。我创建了 myAnnotation.m 和 myAnnotation.h

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

任何帮助或帮助链接将不胜感激。我什至不确定我是否走在正确的道路上,但谷歌搜索“修改 iphone sdk 框架”并没有出现太多。

【问题讨论】:

    标签: iphone frameworks mapkit


    【解决方案1】:

    您为什么要尝试修改框架?您应该将itemID 定义为myAnnotation.h 中的属性或实例变量(或两者)。你说currentAnnotation.itemTag 没用;为此,您需要将 itemTag 定义为 currentAnnotation 所属的任何类的属性。

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

    编辑:这是一个例子。

    MyAnnotation.h:

    @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 调用将为您创建 setter 和 getter(设置和检索 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
    

    这应该可以平息警告。

    【讨论】:

    • 抱歉,您能澄清一下“属性变量”的含义吗?我确实有一个 itemID 的实例变量定义为 NSString *itemID ...我需要对此做一些特别的事情吗?该代码实际上正在运行(恢复为原始 mapkit.framework),但它给了我同样的警告。
    • 我已经在 myAnnotation.h/m 中有这个。需要明确的是,我有 myAnnotation.h/m 和 MapViewController.h/m。我正在尝试在 MapViewController.h/m 中使用 currentAnnotation.itemID。根据您的示例以及我在代码中已经看到的内容,我假设我应该在 myAnnotation.h/m 中定义 itemID - 但我仍然收到相同的“未在协议中找到”警告。
    • 当我在后面的方法中从 currentAnnotation.itemID 中检索值时,实际上会出现警告。当我将值放入 currentAnnotation.itemID 时没有警告。
    • 如果我执行 [currentAnnotation itemID],它会给我一个警告。如果我执行 currentAnnotation.itemID,它会给我一个错误。仅在我提取数据时,而不是在将其放入时。
    • 非常感谢 - 问题是我在 viewForAnnotation 方法中引用 itemID,该方法使用 () 注释。我将其更改为 (myAnnotation)annotation 并清除了错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多