我有一个将属性定义为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,因此将其释放,之后再替换为字符串。