我仍在尝试改进"My Second iOS App",这是Apple提供的教程。这是故事板的图片,附加了对应该发生的事情的评论。
单击完成按钮(步骤3)时,实际屏幕应返回主菜单(3.a),同时应将完成的BirdSightingObject添加到BirdMasterViewController
(3.b)列表中。所以我认为我可以使用Singleton,因为可能只有一个对象同时添加,它使得从不同类中访问变得更加容易。
在本教程中,已经为数据处理提供了一个类,“BirdSighting
”,它可能被用作单例。但由于我只有初级知识的OOP和设计模式,我不知道,如果我可以使用它,或者我必须自己编写参考现有类。
其次:我一点也不知道如何访问BirdMasterViewController
方法中的(IBAction)done
以最终将对象保存在列表中。
注意:以下源代码部分由Apple,Inc。提供。请参阅this以查看本教程的完整代码清单。不打算复制权限。
BirdSighting.h
:
@interface BirdSighting : NSObject
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *location;
@property (nonatomic, strong) NSDate *date;
- (id)initWithName:(NSString *)name location:(NSString *)location date:(NSDate *)date;
- (id)initWithNameOnly:(NSString *)name date:(NSDate *)date;
@end
BirdSighting.m
:
#import "BirdSighting.h"
@implementation BirdSighting
- (id)initWithName:(NSString *)name location:(NSString *)location date:(NSDate *)date
{
self = [super init];
if (self)
{
_name = name;
_location = location;
_date = date;
return self;
}
return nil;
}
-(id)initWithNameOnly:(NSString *)name date:(NSDate *)date
{
self = [super init];
if (self)
{
_name = name;
_date = date;
return self;
}
return nil;
}
@end
(IBAction)done
方法,MainMenuViewController.m
:
- (IBAction)done:(UIStoryboardSegue *)segue
{
if ([[segue identifier] isEqualToString:@"ReturnInput"])
{
AddLocationToSighting *addController = [segue sourceViewController];
if (addController.birdSighting)
{
[self.dataController addBirdSightingWithSighting:addController.birdSighting];
[[self tableView] reloadData];
}
[self dismissViewControllerAnimated:YES completion:NULL];
}
}
要点:
BirdSighting
转换为单身吗?如果是,那么缺少什么? (不需要为我编写代码,我希望如果你提供一个提示,我可以自己做。)BirdMasterViewController
中?我不知道如何访问(IBAction)done
中未涉及的ViewController。答案 0 :(得分:4)
我可以将BirdSighting变成单身人士吗?
没有
BirdSighting
是模型对象,不是集合,当然也不是需要全局访问的变量。但是,您可以制作一个单独的Bird Sighting Manager,它可以控制鸟类目击列表,并可以根据需要添加,删除或序列化它们。虽然,请记住,单身人士创造全球状态,这总是一件坏事。
如何在BirdMasterViewController中保存对象?
这又回到了上面提到的单身人士身上。我还建议添加控制器和主列表视图之间的某种形式的委派,但我发现这可能是所有中间视图控制器的挑战。即使是通知也会有效(在info
参数中有新的瞄准)。