3

我还在努力改进“我的第二个 iOS 应用”,这是 Apple 提供的教程。这是故事板的图片,并添加了对应该发生的事情的评论。

故事板的详细信息以及添加的评论

单击完成按钮(步骤 3)时,实际屏幕应返回主菜单(3.a),而完成的 BirdSightingObject 应添加到BirdMasterViewController(3.b)列表中。所以我想我可以使用 Singleton,因为只能同时添加一个对象,这使得从不同类的访问变得更加容易。

在本教程中,已经为数据处理提供了一个类“ BirdSighting”,它可能被用作单例。但由于我只有 OOP 和设计模式的初级知识,我不知道我是否可以使用它,或者我是否必须参考现有的类来编写自己的。

其次:我一点也不知道如何访问方法BirdMasterViewController中的(IBAction)done以最终将对象保存在列表中。

注意:以下源代码部分由 Apple, Inc. 提供。请参阅查看教程的完整代码列表。无意侵犯版权。

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.
4

1 回答 1

4

我可以将 BirdSighting 转换为单例吗?

不。

BirdSighting是一个模型对象,而不是一个集合,当然也不是一个需要全局访问的变量。但是,您可以创建一个单独的 Bird Sighting Manager,它控制鸟类观测列表,并可以根据需要添加、删除或序列化它们。虽然,请记住单例创建全局状态,这总是一件坏事。

如何将对象保存在 BirdMasterViewController 中?

这又回到了上面建议的单例。我还建议在添加控制器和主列表视图之间进行某种形式的委派,但我认为这可能是所有中间视图控制器的挑战。即使是通知也会起作用(使用info参数中的新发现)。

于 2013-03-27T08:51:25.897 回答