Objective-C и Cocoa: сбой при вызове функции класса без входа в функцию - PullRequest
1 голос
/ 03 января 2011

У меня есть функция класса (объявленная и реализованная) в классе MyUtils.Когда я вызываю эту функцию, мое приложение вылетает.В отладчике у меня есть точка останова на первом действии функции «theFunction».И эта точка останова никогда не достигается.

Вот код:

// =================================================================================================
// 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**

Консоль говорит:

2011-01-03 02:05:07.188 Learning Project[1667:207] *** NSInvocation: warning: object 0xe340 of class 'MyUtils' does not implement methodSignatureForSelector: -- trouble ahead
2011-01-03 02:05:07.188 Learning Project[1667:207] *** NSInvocation: warning: object 0xe340 of class 'MyUtils' does not implement doesNotRecognizeSelector: -- abort

Если я заменю вызов на NSString *item = @"youyou";все в порядке.

Принудительное сохранение на aPreviousNSString до вызова ничего не меняет.У вас есть представление о том, что происходит?

Ответы [ 3 ]

3 голосов
/ 03 января 2011

У вас нет суперкласса, объявленного в вашем классе MyUtils. Чтобы это исправить, просто измените @interface MyUtils на @interface MyUtils : NSObject. Если вы не объявляете суперкласс, вы должны предоставить все необходимые методы самостоятельно.

3 голосов
/ 03 января 2011

Вы объявили MyUtils без суперкласса, поэтому среда выполнения жалуется, что не реализует некоторые базовые поведения (справедливо). Вы, вероятно, хотели наследовать от NSObject:

@interface MyUtils : NSObject {
}

+ (NSString*) changeDateFormat_fromFormat:(NSString*)sourceFormat sourceDateString:(NSString*)sourceDateString destFormat:(NSString*)destFormat;
+ (void) simpleAlert_ok:(NSString*)alertTitle message:(NSString*)alertMessage;
@end
1 голос
/ 03 января 2011

Ваш класс должен иметь некоторый тип объекта, чтобы его можно было компилировать.Базовым объектом в Objective-C для iOS является NSObject, все классы наследуют его.

Вы хотите изменить строку, которая говорит:

@interface MyUtils

на:

@interface MyUtils : NSObject { 


}

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

Для получения дополнительной информации о NSObject см. Ссылку на класс NSObject в Apple Developer Library .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...