【发布时间】:2013-07-20 17:50:20
【问题描述】:
我有一个将属性定义为NSURL 的对象:
@interface fcpElement : NSObject
@property (copy) NSString* elementName;
@property (copy) NSURL* elementPath;
@property (copy) NSURL* elementParent;
@property () BOOL elementIsHidden;
@property (copy) NSString* elementType;
-(id)initWithName : (NSString*) elementName path: (NSURL*) elementPath parent: (NSURL*) elementParent hiddenValue: (BOOL) elementIsHidden type: (NSString*) elementType;
@end
在我的应用程序控制器中,我创建了一个 NSMutableArray 并使用我的 init… 方法用我的对象填充它。
然后我有一个按钮,它调用应用程序控制器上的一个方法,该方法通过从数组中的一个对象调用实例变量来创建一个新的NSURL,如下所示:
for(currentElement in _finalCutData) {
NSURL *currentElementPath = [currentElement elementPath];
最终我想进行比较,看看这个新 URL 是否与另一个 URL 相等,但如果我执行以下任何操作,我总是会收到导致程序停止的错误:
NSURL *currentElementPathAbsolute = [currentElementPath absoluteURL];
出现错误:-[__NSCFString absoluteURL]: unrecognized selector sent to instance
如果我添加一个断点,它会说currentElementPath 是一个无效指针。但是如果我 NSLog [currentElement elementPath] 我会得到其中包含的 URL。
如何从我的实例变量中获取 URL 以便我可以使用它?我在属性声明中使用了错误的参数类型吗?还是别的什么?
【问题讨论】:
-
显然
currentElementPath是NSString,而不是NSURL。elementPath方法有什么作用?我在文档中没有看到 - 是你写的吗? -
“如果我添加一个断点,它会说 currentElementPath 是一个无效的指针。”你在哪里设置断点?如果您将其设置在声明
currentElementPath的行上,则它的初始化尚未发生,因此您需要执行一次(即“执行此行”),变量才会有一个值供您打印.另一种方法是在方法中的任何后续行设置断点;我会把它放在下一行。 -
一般的答案是使用它的 Zombies 模板在 Instruments 下运行您的应用程序,并在您尝试向其发送
absoluteURL消息之前查看是什么杀死了 URL。更具体地说,我认为您没有显示在这两点之间,即currentElementPath的声明和absoluteURL消息。请编辑您的问题以包含currentElementPath声明和absoluteURL消息中使用它之间的所有代码。 -
我已经更新了我的代码,其中有一些如何省略了我的对象中的其余属性声明,以防万一。 @PeterHosey绝对URL声明是我检索实例变量后的下一行代码,它全部在一行代码中,但我将它分成2行以尝试找出问题所在。
标签: objective-c cocoa nsurl