2013-05-06 66 views
0

我首先是新手,并且是iOS开发新手。我已经完成了iTunes上的CS193P课程,并准备好解决我的第一个正确的应用程序。我设置了原型,只需要一些参考指针就可以开始(需要这种信心)。创建应用程序的起始点,允许用户将项目添加到两个单独的列表中

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

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

道歉为我们这里突出的基本问题,但没有人有任何良好的参考点本质上,创建一个entires列表获得附加到特定列表。我熟悉模态视图控制器和代表;我基本上想知道我应该用什么来“存储”用户添加的内容。我应该使用核心数据还是其他技术等?

谢谢! Amit

回答

0

是的,你必须使用核心数据来存储条目。否则,无论何时用户重新打开应用程序,所有条目都将消失。

+0

感谢您的回复,这很合理! – amitsbajaj 2013-05-09 07:53:51

0

我一直在使用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]; 
     } 
    } 
} 
+0

感谢Doc的回答。这确实有帮助,虽然我听说过NSKeyedArchivers,但我没有深入,但看看你的代码,看起来并不难。我正在核心数据之间进行权衡,但非常感谢您的回答。我一定会对此进行调查。 – amitsbajaj 2013-05-09 07:56:53

0

你提的问题是非常普遍的,所以这是我一般的回答:我会建议使用核心数据存储列表和一个NSFetchedResultsController来显示它们。我还建议你看看免费的Sensible TableView框架,我经常使用它来自动执行与你手头上的任务非常相似的任务。

+0

谢谢马特 - 这非常有帮助,我确实会看看这个框架。我对一般问题表示歉意 - 它仍然在我的脑海中形成,但很高兴知道Core Data是要走的路,NSFetchedResultsController将成为检索它的方式。 – amitsbajaj 2013-05-09 07:54:59

相关问题