我有一个将属性定义为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]:无法识别的选择器已发送到实例

如果添加断点,则表示currentElementPath是无效的指针。但是,如果我NSLog [currentElement elementPath]我会得到其中包含的URL。

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

最佳答案

您的问题很可能是此调用:

[currentElement elementPath];


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

我假设-elementPath被实现为一个简单的getter方法(也许是@property)。在这种情况下,错误在于任何将代码首先存储该值的代码。

您正在使用ARC还是手动内存管理?如果是后者,那么您这里也有一个僵尸的机会。您没有保留URL,因此将其释放,之后再替换为字符串。

08-05 22:25