从NSURL实例变量创建NSURL - 无效指针

时间:2013-07-20 17:50:20

标签: objective-c cocoa nsurl

我有一个对象将属性定义为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

在我的app控制器中,我创建了一个NSMutableArray,并使用我的init…方法将其填充到我的对象中。 然后我有一个按钮,它调用app控制器上的一个方法,通过从数组中的对象调用实例变量来创建一个新的NSURL,如下所示:

for(currentElement in _finalCutData) {
    NSURL *currentElementPath = [currentElement elementPath];

最终我想进行比较以查看这个新网址是否与另一个相同,但如果我执行以下任何操作,我总会收到阻止我的程序的错误:

NSURL *currentElementPathAbsolute = [currentElementPath absoluteURL];

错误: - [__ NSCFString absoluteURL]:无法识别的选择器发送到实例

如果我添加断点,则表示currentElementPath是无效指针。但是,如果我NSLog [currentElement elementPath]我获得了包含在其中的网址。

如何从我的实例变量中获取URL以便我可以使用它?我在我的属性声明中使用了错误的参数类型吗?还是别的什么?

2 个答案:

答案 0 :(得分:1)

您的问题很可能就是这个电话:

[currentElement elementPath];

返回一个字符串,而不是一个URL。 -elementPath如何实施?您是否看到任何编译器警告?

我认为-elementPath被实现为一个简单的getter方法(可能是@property)。在这种情况下,错误在于首先存储该值的代码。

您使用ARC还是手动内存管理?如果是后者,你也有机会在这里找到一个僵尸。你没有保留这个URL,所以它被取消分配,后来换成了字符串。

答案 1 :(得分:0)

我很惊讶我似乎可以在这个论坛上提供帮助,因为我是一个初学者,但是NSURL类有你应该使用的初始化方法,比如initFileURLWithPath:你可能不应该覆盖NSURL初始化方法。