【发布时间】:2016-02-19 19:29:31
【问题描述】:
我正在创建一个 Schedule 类并尝试在 ViewController 中循环输出所有事件。我创建了一个 Event 类和 Schedule 类。我正在循环遍历 NSMutableArray 以获取所有事件的文本。我的问题是,当我在 Schedule.m 文件中的 addNewEvent 方法中时,我用通过 addObject 添加的最后一个对象覆盖了我的 NSMutable 数组。我的目标是将所有事件对象一一添加到数组中并显示它们的文本。如果我可以为事件对象设置单独的 ID,那就太好了。我知道当我将对象添加到可变数组时,我可能需要遍历 addNewEvent 方法中的某些内容,但我不知道通过什么。我还认为也许我在错误的位置初始化了 NSMutableArray(它是 Schedule 类的属性),但是如果我将初始化程序移动到其他任何地方,它就会出错。
你能帮我解决这个问题吗?任何帮助将不胜感激!
我的代码如下。我有两个类(Event & Schedule)和一个 ViewController 文件。
事件.h:
@interface Event : NSObject
@property int eventId;
@property NSString * eventTitle;
@property NSString * eventDescription;
@property NSDate * eventDate;
-(void) logEvent;
-(NSString*) getEventText;
@end
事件.m:
#import "Event.h"
@implementation Event
-(NSString*) getEventText {
NSString * eventText1 = [NSString stringWithFormat: @"\n\nEvent ID: %d.\n", _eventId];
NSString * eventText2 = [eventText1 stringByAppendingFormat: @"Title: %@.\n", _eventTitle];
NSString * eventText3 = [eventText2 stringByAppendingFormat:@"Description: %@.\n", _eventDescription];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateStyle = NSDateFormatterFullStyle;
dateFormatter.timeStyle = NSDateFormatterShortStyle;
NSString * eventText = [eventText3 stringByAppendingFormat:@"Date: %@.\n\n", [dateFormatter stringFromDate:_eventDate]];
return eventText;
}
@end
Schedule.h:
@interface Schedule : NSObject
@property int idIndex;
@property NSMutableArray * scheduledEvents;
-(NSString*) getAllEventText;
-(void)addNewEventWithTitle:(NSString *)Title Description:(NSString *)Description andDate:(NSDate *)Date;
@end
Schedule.m:
#import "Schedule.h"
#import "Event.h"
@implementation Schedule
-(void)addNewEventWithTitle:(NSString *)Title Description:(NSString *)Description andDate:(NSDate *)Date {
Event * event = [[Event alloc] init];
_idIndex = 1;
[event setEventTitle:Title];
[event setEventDescription:Description];
[event setEventDate:Date];
[event setEventId:_idIndex];
NSLog(@"%@", [event getEventText]);
_scheduledEvents = [[NSMutableArray alloc] init];
[_scheduledEvents addObject: event];
NSLog(@"%lu", [_scheduledEvents count]);
}
-(NSString*) getAllEventText {
NSString * allEventText;
// loop through NSMutableArray calling each Event's getEventText method using a for loop
for (int i=0; i<[_scheduledEvents count]; i++) {
allEventText = [NSString stringWithFormat:@"Event %d: %@\n", i+1, [_scheduledEvents[i] getEventText] ];
NSLog(@"%@", [_scheduledEvents[i] getEventText]);
}
// return concatenated string
return allEventText;
}
@end
ViewController.m:
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
Schedule * mySchedule = [[Schedule alloc] init];
[mySchedule addNewEventWithTitle:@"My Birthday" Description:@"My most cherished birthday" andDate:[NSDate dateWithTimeIntervalSinceReferenceDate:484830000]];
[mySchedule addNewEventWithTitle:@"Meeting with the Client" Description:@"My most important meeting" andDate:[NSDate dateWithTimeIntervalSinceReferenceDate:481302000]];
[mySchedule addNewEventWithTitle:@"Appointment with Family Doctor" Description:@"My most urgent appointment" andDate:[NSDate dateWithTimeIntervalSinceReferenceDate:480270000]];
[_outputTextView setText:[mySchedule getAllEventText]];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
【问题讨论】:
标签: ios objective-c arrays nsmutablearray