因此,我的应用程序中出现一个大文本字段的页面,用户输入文本并点击保存按钮。当保存按钮被击中时,在AppDelegate文件中声明的名为savedPosts的NSMutableArray将文本字段的文本内容保存到此数组中。这个保存代码是从其他视图控制器调用的,而不是AppDelegate,即使实际的数组是在AppDelegate中声明的。我不确定这是不是一个好主意,但这仍然不是问题。无论如何,我需要它,以便每当用户点击新的或现有的帖子上的保存按钮时,它会向数组中添加另一个对象并将同一对象保存到plist。什么是设置这整个事情的最佳方式 - 将文本从文本字段保存到将数据自动保存到plist的数组中。如何在每次将其添加到数组时将其添加到plist文件中。数组应该在哪里被声明和分配?将NSMutableArray的内容写入plist文件
0
A
回答
2
如果你想确保你的帖子总是在你添加新帖的时候写出来,我会做一个非常简单的类来处理帖子的整体。您可以使用一些URL初始化该类,然后将旧的持久数据读入数组,并实现一些处理添加新帖子并将数据保留回URL的方法类型。应用程序委托可以简单地管理这个类的一个实例,指向适当的URL。您可以根据需要使其变得复杂或简单。
下面附上了一个非常简单的这样的类的实现,它只是您在问题中描述的内容。但是,应该注意的是,代码仅供参考,如果数据集变得非常大,显然不会扩展。
这个简单的参考实现需要iOS 4.0+用于GCD调用,并且需要用LLVM 2.0+编译器为ivars-in-implementation构建。如果你想支持iOS的早期版本,你可以删除GCD并同步其他方式或阻止(不推荐)。如果你想用GCC-LLVM而不是Clang构建,你可以将ivar decl移动到界面上。
// Posts.h
#import <Foundation/Foundation.h>
@interface Posts : NSObject
@property(nonatomic, readonly) NSArray* posts;
// Initialize with array at URL or create file
// if no array is there; if nil, posts contents
// are not persisted
- (id)initWithURL:(NSURL*)url;
- (void)appendPost:(NSString*)post;
@end
// Posts.m
#import "Posts.h"
@implementation Posts {
// Persistent content URL
NSURL* _url;
// In-memory array
NSMutableArray* _posts;
// Used for synchronizing
dispatch_queue_t _postQueue;
}
@dynamic posts;
- (id)init
{
return [self initWithURL:nil];
}
- (id)initWithURL:(NSURL*)url
{
if((self = [super init])) {
if(url) {
_url = [url copy];
_posts = [[NSMutableArray alloc] initWithContentsOfURL:_url];
if(!_posts) {
// You may not want to do this as it may later destroy whatever may have been at _url
NSLog(@"Warning: Could not parse contents of url '%@': Creating new file", _url);
}
} else {
_posts = [[NSMutableArray alloc] init];
}
_postQueue = dispatch_queue_create("org.example.post_queue", 0);
}
return self;
}
- (void)dealloc
{
[_url release];
[_posts release];
dispatch_release(_postQueue);
[super dealloc];
}
- (NSArray*)posts
{
__block NSArray* posts = nil;
if(dispatch_get_current_queue() != _postQueue) {
dispatch_sync(_postQueue, ^{ posts = [_posts copy]; });
} else {
posts = [_posts copy];
}
return [posts autorelease];
}
- (void)appendPost:(NSString*)post
{
if([post length] == 0) return;
dispatch_async(_postQueue, ^{
[_posts appendObject:post];
if(_url) [_posts writeToURL:_url atomically:YES];
});
}
@end
1
-[NSArray writeToFile:atomically:];
只要你的数组的内容是由plist对象组成,那么你的应用程序委托作为数据的中心位置与你的整个应用程序共享也没有错,那就是什么它的。另外,如果这些数据在执行应用程序之间很小且持久,则可能需要考虑通过NSUserDefaults将其保存为用户默认值。
相关问题
- 1. 将NSMutableArray写入txt文件
- 2. 从plist获取数据到NSMutableArray并将NSMutableArray写入到相同的plist iPhone
- 3. 写入plist文件不写
- 4. 将TEXTAREA内容写入文本文件
- 5. 将RichTextBox的内容写入文件
- 6. 将JSF inputText的内容写入文件
- 7. 改写了NSMutableArray的内容的plist文件(第一项是在plist中总是NULL)
- 8. 如何将布尔写入plist文件
- 9. 如何将BytesWritable内容写入文件?
- 10. 将xml内容写入文件
- 11. 如何写入plist文件?
- 12. 无法写入plist文件
- 13. 将动态内容写入xCode项目.plist
- 14. 将文件内容写入新文件只写入字符串的一半
- 15. plist文件的内容到NSString
- 16. 的plist不会写入文件
- 17. 无法写入文件的内容
- 18. 根据EditText的内容写入文件
- 19. Django自定义文件存储 - 将内容写入文件
- 20. PHP将文件内容从url写入本地文件
- 21. 读写plist文件
- 22. 将数据写入plist
- 23. 将字典写入plist
- 24. 将数组的内容写入文本文件
- 25. 将列表<string>的内容写入文本文件
- 26. 将结构写入NSMutableArray
- 27. 从plist文件中写入和读取
- 28. 无法写入plist文件iOS
- 29. 远程写入.plist文件iPhone SDK
- 30. 在.plist文件中写入iphone/ipad?