我正试图让我的应用程序更有活力。我试图在一个类中声明一个函数,该类应该被实例化并被我拥有的其他几个类使用。
目前我正在这样做。
// 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:代码未复制粘贴,因此可能存在语法错误。
答案 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)
不会将方法名称前面的-
更改为+
,使其成为静态方法,然后您可以“按类”而不是“按实例”调用?