Objective-C和Cocoa:调用类函数而不输入函数时崩溃

Objective-C和Cocoa:调用类函数而不输入函数时崩溃,objective-c,crash,debugging,function-call,Objective C,Crash,Debugging,Function Call,我在MyUtils类中声明并实现了一个类函数。 当我调用此函数时,我的应用程序崩溃。在调试器中,我在函数的第一个操作上有一个断点。而这个断点永远不会到达 代码如下: // ================================================================================================= // MyUtils.m // ==================================================

我在MyUtils类中声明并实现了一个类函数。 当我调用此函数时,我的应用程序崩溃。在调试器中,我在函数的第一个操作上有一个断点。而这个断点永远不会到达

代码如下:

// =================================================================================================
// MyUtils.m
// =================================================================================================
+ (NSString*) changeDateFormat_fromFormat:(NSString*)sourceFormat sourceDateString:(NSString*)sourceDateString destFormat:(NSString*)destFormat {
    if (sourceDateString == nil) return (nil); **<-- breakpoint here**

    NSDate* aDate = [NSDate dateFromString:sourceFormat theDateString:sourceDateString];
    return ([aDate stringValueWithFormat:destFormat]);
}

// ===================================================================
// MyUtils.h
// ===================================================================
@interface MyUtils
+ (NSString*) changeDateFormat_fromFormat:(NSString*)sourceFormat sourceDateString:(NSString*)sourceDateString destFormat:(NSString*)destFormat;
+ (void) simpleAlert_ok:(NSString*)alertTitle message:(NSString*)alertMessage;

@end


// ===================================================================
// Elsewhere.m
// ===================================================================
- (void) aFunction:(SomeClass*)someParam {
    SomeOtherClass* val = nil;
    NSString* intitule = nil;


    intitule = [MyUtils changeDateFormat_fromFormat:@"yyyyMMdd" sourceDateString:@"toto" destFormat:@"EEEE dd MMMM yyyy"]; **<-- crash here**
如果我用NSString*item=@youyou替换调用;那么一切都好了

在调用之前强制保留PreviousNSString不会改变任何内容。 您知道发生了什么吗?

您声明的MyUtils没有超类,因此运行时抱怨它没有正确地实现某些基本行为。您可能打算从NSObject继承:

您声明的MyUtils没有超类,因此运行时抱怨它没有正确地实现某些基本行为。您可能打算从NSObject继承:


您没有在MyUtils类上声明超类。要修复它,只需将@interface MyUtils更改为@interface MyUtils:NSObject。如果您没有声明超类,您必须自己提供所有必需的方法。

您没有在MyUtils类上声明超类。要修复它,只需将@interface MyUtils更改为@interface MyUtils:NSObject。如果不声明超类,您必须自己提供所有必需的方法。

您的类必须是某种对象类型,才能进行编译。Objective-C for iOS中的基本对象是NSObject,所有类都从中继承

您要更改显示以下内容的行:

@接口MyUtils

为此:

@interface MyUtils : NSObject { 


}

  + (NSString *) ... ... ...

有关NSObject的详细信息,请参阅

类必须是某种对象类型才能编译。Objective-C for iOS中的基本对象是NSObject,所有类都从中继承

您要更改显示以下内容的行:

@接口MyUtils

为此:

@interface MyUtils : NSObject { 


}

  + (NSString *) ... ... ...


有关NSObject的详细信息,请参阅

我们能看到更多的代码吗?我猜MyUtils是单身汉。对吗?这似乎不是你的实际代码。在创建模拟示例时,您可能错过了正在崩溃的真实代码的关键方面。请告诉我们您实际使用的是什么。@Moshe否,那么它应该是[[MyUtils sharedUtils]…]@JacobRelkin-True,但这个概念听起来像是一个单例实用程序类。另外,请记住,命名约定不是必需的——它可以是他想要的任何东西。控制台输出是什么?stacktrace是什么?我们能看到更多的代码吗?我猜MyUtils是单身汉。对吗?这似乎不是你的实际代码。在创建模拟示例时,您可能错过了正在崩溃的真实代码的关键方面。请告诉我们您实际使用的是什么。@Moshe否,那么它应该是[[MyUtils sharedUtils]…]@JacobRelkin-True,但这个概念听起来像是一个单例实用程序类。另外,请记住,命名约定不是必需的——它可以是他想要的任何东西。控制台输出是什么?stacktrace是什么?就是它。。。我不认为这是错误的原因。任何类都必须至少继承NSObject。。。这是我脑子里想的:-但是。。。有人能解释一下为什么我在调用函数之前等待调试器,有时它在没有超类的情况下可以正常工作吗?就是这样。。。我不认为这是错误的原因。任何类都必须至少继承NSObject。。。这是我脑子里想的:-但是。。。有人能给我解释一下为什么在调用函数之前等待调试器,有时没有超类它可以正常工作吗?好的,但是为什么在调用函数之前等待调试器,有时没有超类它可以正常工作呢?这很有趣。我猜当您等待时,运行时会直接查看类,而不是调用methodSignatureForSelector:,并且不响应ToSelector:,但我不知道它为什么会这样做。好吧,但是为什么如果在调用函数之前等待调试器,有时它在没有超类的情况下工作得很好?这很有趣。我猜当您等待时,运行时会直接查看类,而不是调用methodSignatureForSelector:,并且不会响应ToSelector:,但我不知道它为什么会这样做。好吧,但如果我在调用函数之前等待调试器,有时,如果没有超类,它可以正常工作?我建议清理您的项目Command+Shift+K,然后重建它。看看会发生什么。好吧,但是为什么如果我在调用函数之前等待调试器,有时它在没有超类的情况下工作得很好呢?我建议清理project命令+Shift+K,然后重建它。看看会发生什么。
@interface MyUtils : NSObject { 


}

  + (NSString *) ... ... ...