到达不同类的函数

时间:2011-05-03 11:05:51

标签: iphone objective-c

我正试图让我的应用程序更有活力。我试图在一个类中声明一个函数,该类应该被实例化并被我拥有的其他几个类使用。

目前我正在这样做。

// FunkBib.h

#import <Foundation/Foundation.h>


@interface FunkBib : NSObject {        
}
-(NSString *)formateraTillEEEEdMMMM:(id)suprDatum;
@end

// FunkBib.m

-(NSString *)formateraTillEEEEdMMMM:(id) suprDatum{        

    NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
    dateFormatter.dateFormat = @"yyyyMMdd";        

    NSDate *date = [dateFormatter dateFromString:suprDatum];        

    NSLocale *swedishLocale=[[[NSLocale alloc] initWithLocaleIdentifier:@"sv_SE"] autorelease];
    dateFormatter.locale=swedishLocale;        

    dateFormatter.dateFormat=@"EEEE d MMMM";
    NSString * weekdayString= [dateFormatter stringFromDate:date];

    NSString *newWeekDayString = [weekdayString stringByReplacingCharactersInRange:NSMakeRange(0,1) withString:[[weekdayString substringToIndex:1] capitalizedString]];

    return newWeekDayString;        
}

与此同时,在我的其他课程中,我这样做。

//someclass.h

#import <UIKit/UIKit.h>    

@class FunkBib;

@interface someclass : UIViewController {    

FunkBib *funkBib;

}
@property(nonatomic,retain)     FunkBib                         *funkBib;    
@end

// someclass.m

#import "FunkBib.h"    
@implementation someclass.m    
@synthesize funkBib;

在代码的后期,我想像这样使用这个函数。

somelabel.text = [funkBib formateraTillEEEEdMMMM:[someArray objectAtIndex:somewhere]];

我不知道为什么这不起作用。任何人都有关于我如何解决这个问题的一般指示?

BTW:代码未复制粘贴,因此可能存在语法错误。

4 个答案:

答案 0 :(得分:1)

为FunBib创建实例

- (无效)viewDidLoad中{      [super viewDidLoad];     self.funkBib = [[FunkBib alloc] init];
    somelabel.text = [self.funkBib formateraTillEEEEdMMMM:[someArray objectAtIndex:somewhere]]; }

答案 1 :(得分:1)

如果方法中的所有变量都是局部变量,则可以使用静态方法。

+(NSString *)formateraTillEEEEdMMMM:(id) suprDatum{



    NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
    dateFormatter.dateFormat = @"yyyyMMdd";


    NSDate *date = [dateFormatter dateFromString:suprDatum];


    NSLocale *swedishLocale=[[[NSLocale alloc] initWithLocaleIdentifier:@"sv_SE"] autorelease];
    dateFormatter.locale=swedishLocale;


    dateFormatter.dateFormat=@"EEEE d MMMM";
    NSString * weekdayString= [dateFormatter stringFromDate:date];

    NSString *newWeekDayString = [weekdayString stringByReplacingCharactersInRange:NSMakeRange(0,1) withString:[[weekdayString substringToIndex:1] capitalizedString]];

    return newWeekDayString;

}

通过您的班级名称

来调用它
[FunkBib formateraTillEEEEdMMMM:obj];

答案 2 :(得分:1)

好像你试图在这里操纵NSString。为什么不尝试为NSString创建类别而不是创建此对象。这意味着您不必在每次要对执行的字符串执行此操作时创建此对象。对于未来的项目,Plus还有很多可扩展性。

请参阅此链接以创建类别: http://macdevelopertips.com/objective-c/objective-c-categories.html

如果我创建此类别,它看起来像

NSString + FormattedDate.h:

@interface NSString (FormattedDate)
-(NSString *) formateraTillEEEEdMMMM;
@end

NSString + FormattedDate.m:

@implementation NSString (FormattedDate)

-(NSString *)formateraTillEEEEdMMMM {

    NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
    dateFormatter.dateFormat = @"yyyyMMdd";

    NSDate *date = [dateFormatter dateFromString:self];

    NSLocale *swedishLocale=[[[NSLocale alloc] initWithLocaleIdentifier:@"sv_SE"] autorelease];
    dateFormatter.locale=swedishLocale;


    dateFormatter.dateFormat=@"EEEE d MMMM";
    NSString * weekdayString= [dateFormatter stringFromDate:date];

    NSString *newWeekDayString = [weekdayString stringByReplacingCharactersInRange:NSMakeRange(0,1) withString:[[weekdayString substringToIndex:1] capitalizedString]];

    return newWeekDayString;
}

@end

然后可以致电:

NSString *formattedDate = [NSString formateraTillEEEEdMMMM:@"whatever"];

好多了:)

答案 3 :(得分:1)

不会将方法名称前面的-更改为+,使其成为静态方法,然后您可以“按类”而不是“按实例”调用?