Objective c 方法在ApplicationIDFinishLaunching中工作,但在另一个方法(在同一文件中)中不工作!

Objective c 方法在ApplicationIDFinishLaunching中工作,但在另一个方法(在同一文件中)中不工作!,objective-c,macos,cocoa,Objective C,Macos,Cocoa,我正在制作一个应用程序,需要创建一个目录来下载一些文件。当我打电话时 [[NSFileManager defaultManager] createDirectoryAtPath: [[self.searchURL theDownloadLocation] stringByStandardizingPath] withIntermediateDirectories:YES attributes:nil error:nil]; 内 - (void)applicationDidFinishLaunc

我正在制作一个应用程序,需要创建一个目录来下载一些文件。当我打电话时

[[NSFileManager defaultManager] createDirectoryAtPath:
[[self.searchURL theDownloadLocation] stringByStandardizingPath]
withIntermediateDirectories:YES attributes:nil error:nil];

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
它很好用。我有一个按钮,应该开始下载。我已经在xib文件中列出了它,它可以做其他任何事情,所以我知道按钮可以工作。同样,如果我在
applicationdFinishLaunching
中调用
NSFileManager
方法,而不是在按下按钮时调用的另一个方法中,则创建目录时不会出现问题。它会因
(lldb)
消息而崩溃

传递的参数完全相同,我甚至在button方法中设置了
NSLog
[[self.searchURL theDownloadLocation]stringbystandardingPath]
,它肯定是一个
NSString
,所以当我按下按钮时它会记录。我错过了什么

我有时会收到一条错误消息:

2013-02-12 19:33:04.404 dArt[2351:303] -[NSISRestrictedToNonNegativeVariableToBeMinimized
stringByStandardizingPath]: unrecognized selector sent to instance 0x100528ba0
2013-02-12 19:33:04.405 dArt[2351:303] -[NSISRestrictedToNonNegativeVariableToBeMinimized
stringByStandardizingPath]: unrecognized selector sent to instance 0x100528ba0
2013-02-12 19:33:04.408省道[2351:303]( 0 CoreFoundation 0x00007fff862c40a6例外预处理+198 1 libobjc.A.dylib 0x00007fff8d4e53f0 objc_异常_抛出+43 2 CoreFoundation 0x00007fff8635a6ea-[NSObject(NSObject)未识别选择器:+186 3 CoreFoundation 0x00007fff862b25ce转发+414 4 CoreFoundation 0x00007fff862b23b8\u CF\u转发\u准备\u 0+232 5 dArt 0x000000010000248d-[AppDelegate searchTheArt:+141 6应用套件0x00007fff8a91ea59-[N应用程序发送操作:收件人:发件人:][342 7应用套件0x00007fff8a91e8b7-[NSControl sendAction:to::::+85 8应用套件0x00007fff8a91e7eb-[NSCell\u发送操作自:][138 9应用套件0x00007fff8a91ccd3-[NSCell trackMouse:inRect:ofView:untillmouseup:+1855 10应用套件0x00007fff8a91c521-[NSButtonCell轨迹鼠标:输入:ofView:UntillMouseUp:+504 11应用套件0x00007fff8a91bc9c-[NSControl mouseDown:+820 12应用套件0x00007fff8a91360e-[NSWindow sendEvent:+6853 13应用套件0x00007fff8a90f744-[NSApplication sendEvent:+5761 14应用套件0x00007fff8a8252fa-[N应用程序运行]+636 15应用套件0x00007fff8a7c9cb6 NSApplicationMain+869 16 dArt 0x00000001000016b2干管+34 17 libdyld.dylib 0x00007fff8b36b7e1开始+0 )
我的问题在别处得到了回答。我只需要将
(copy)
限定符添加到
下载位置
属性


@property(copy)NSString*下载位置

关于你的问题没有什么意义。您在启动时创建了一个目录,但在按下某个按钮时又试图再次创建目录?什么类型的对象是
searchURL
,它接受您所显示的消息?最重要的是,你的错误信息是什么?如果你能提供它,这将非常有启发性。错误消息到底是什么?你是否在你的按钮点击处理程序上放置了一个断点以确认它确实在触发?@trudy不,它只应该在按下按钮时发生,但我将其移动到主方法来调试它。它在那里工作。searchURL是我创建的一个普通NSObject类。错误消息是
lldb
,正如我所说,它与该消息一起崩溃。@我在主要问题中添加了错误消息。有时,它会给出这样的消息,有时,它只是崩溃并说
(lldb)
。我想这是一个
NSString*
?不过,这似乎不应该解决这个问题。我猜可能存在某种内存访问问题——在内存上涂鸦,或者保留一个释放方法的实例。相反,我建议用NSZombie进行调试。好吧,它肯定解决了这个问题。我向另一个委员会寻求帮助,可可开发委员会。一个人看了一眼,告诉我把
assign
改成
copy
。哦,我不知道你有
assign
。它可能也适用于
retain
。您几乎不应该对对象类型使用
assign
。 2013-02-12 19:33:04.408 dArt[2351:303] ( 0 CoreFoundation 0x00007fff862c40a6 __exceptionPreprocess + 198 1 libobjc.A.dylib 0x00007fff8d4e53f0 objc_exception_throw + 43 2 CoreFoundation 0x00007fff8635a6ea -[NSObject(NSObject) doesNotRecognizeSelector:] + 186 3 CoreFoundation 0x00007fff862b25ce ___forwarding___ + 414 4 CoreFoundation 0x00007fff862b23b8 _CF_forwarding_prep_0 + 232 5 dArt 0x000000010000248d -[AppDelegate searchTheArt:] + 141 6 AppKit 0x00007fff8a91ea59 -[NSApplication sendAction:to:from:] + 342 7 AppKit 0x00007fff8a91e8b7 -[NSControl sendAction:to:] + 85 8 AppKit 0x00007fff8a91e7eb -[NSCell _sendActionFrom:] + 138 9 AppKit 0x00007fff8a91ccd3 -[NSCell trackMouse:inRect:ofView:untilMouseUp:] + 1855 10 AppKit 0x00007fff8a91c521 -[NSButtonCell trackMouse:inRect:ofView:untilMouseUp:] + 504 11 AppKit 0x00007fff8a91bc9c -[NSControl mouseDown:] + 820 12 AppKit 0x00007fff8a91360e -[NSWindow sendEvent:] + 6853 13 AppKit 0x00007fff8a90f744 -[NSApplication sendEvent:] + 5761 14 AppKit 0x00007fff8a8252fa -[NSApplication run] + 636 15 AppKit 0x00007fff8a7c9cb6 NSApplicationMain + 869 16 dArt 0x00000001000016b2 main + 34 17 libdyld.dylib 0x00007fff8b36b7e1 start + 0 )