【问题标题】:Starting points for creating an application that allows a user to add items to two separate lists创建允许用户将项目添加到两个单独列表的应用程序的起点
【发布时间】:2013-05-06 16:11:37
【问题描述】:

我首先是 SO 新手,也是 iOS 开发新手。我已经完成了 iTunes 上的 CS193P 课程,并准备好处理我的第一个合适的应用程序。我已经建立了原型,只需要一些关于从哪里开始的参考指针(需要那种信心)。

应用程序的前提是允许用户将条目添加到 2 个可用列表中的 1 个;给予或接受清单。条目将包括“事件名称”、“名称”、“日期”等内容。当然,用户还可以选择浏览列表并查看条目;我想允许用户选择是否按名称、日期或事件进行搜索。

我已经完全建立了原型,我只是想知道这种应用程序是否有点类似于通讯簿?用户可以添加人名(或从联系人中选择姓名)等。

对于我们在这里提出的非常基本的问题,我们深表歉意,但有没有人有任何好的参考点来创建一个附加到特定列表的整体列表。我熟悉模态视图控制器和委托;我基本上想知道我应该用什么来“存储”用户添加的全部内容。我应该使用 Core Data 还是其他一些技术等?

谢谢! 阿米特

【问题讨论】:

    标签: ios core-data storage addressbook


    【解决方案1】:

    是的,您必须使用 Core Data 来存储条目。否则,每当用户重新打开应用程序时,所有条目都将消失。

    【讨论】:

    • 感谢您的回复,这很有道理!
    【解决方案2】:

    我一直在使用 NSKeyedArchivers 来存储列表。 http://developer.apple.com/library/ios/#documentation/cocoa/reference/foundation/Classes/NSKeyedArchiver_Class/Reference/Reference.html

    非常易于管理,它可以轻松存储、保存和检索您的所有数据。

    示例是对象列表 (NSMutableArray)。每个对象都实现了 NSCoding 并具有 initWithCoder: 和 encodeWithCoder: 函数。

    例如(假设对象具有名称和日期属性)

    - (id) initWithCoder:(NSCoder *){
        self = [super init];
        if (self){
            [self setName:[aDecoder decodeObjectForKey:@"name"]];
            [self setDate:[aDecoder decodeObjectForKey:@"date"]];
        }
        return self;
    }
    - (void) encodeWithCoder:(NSCoder *)aCoder{
        [aCoder encodeObject:name forKey:@"name"];
        [aCoder encodeObject:date forKey:@"date"];
    }
    

    然后你可以简单地让你添加这些对象的 NSMutableArray 由具有以下功能的东西管理,然后在其上调用 saveChanges:

    - (NSString *) itemArchivePath{
        NSArray *documentDirectories = NSSearchPathForDirectoriesInDomains(NSDocumentsDirectory, NSUserDomainMask, YES);
        NSString *documentDirectory = [documentDirectories objectAtIndex:0];
        return [documentDirectory stringByAppendingPathComponent:@"myArchiveName.archive"];
    }
    - (BOOL) saveChanges{
        NSString *path = [self itemArchivePath];
        return [NSKeyedArchiver archiveRootObject:myList toFile:path];
    }
    

    实现这两个函数后,您只需调用 saveChanges。

    并在下次启动后检索列表,在您的经理的 init 中:

    - (id) init{
        self = [super init];
        if (self){
            NSString *path = [self itemArchivePath];
            myList = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
            // If the array hadn't been saved previously, create a new empty one
            if (!myList){
                myList = [[NSMutableArray Alloc] init];
             }
        }
    }
    

    【讨论】:

    • 感谢 Doc 的回答。这确实有帮助,虽然我听说过 NSKeyedArchivers,但我还没有深入研究它,但看看你的代码,它看起来并不太难。我在 Core Data 之间权衡了这一点,但非常感谢您的回答;我一定会对此进行调查。
    【解决方案3】:

    您的问题非常笼统,所以这是我的一般回答:我建议使用 Core Data 来存储列表,并使用 NSFetchedResultsController 来显示它们。我还建议您查看免费的 Sensible TableView 框架,我经常使用它来自动执行与您手头非常相似的任务。

    【讨论】:

    • 谢谢马特 - 这非常有帮助,我确实会看看那个框架。对于一般性问题,我深表歉意 - 它仍在我脑海中形成,但很高兴知道 Core Data 是要走的路,而 NSFetchedResultsController 将是检索它的方法。
    猜你喜欢
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    • 2018-09-02
    • 2014-06-15
    • 1970-01-01
    • 2016-01-13
    • 2020-10-31
    • 1970-01-01
    相关资源
    最近更新 更多