【发布时间】:2014-06-11 14:09:49
【问题描述】:
我有一个名为 _objects 的 NSMutableArray,存储在 NSUserDefaults 中。我在应用程序启动时访问 _objects 并将它们放在带有自定义单元格的 CollectionView 中(见下文)。我让用户首先进入编辑模式然后点击所需的单元格来编辑每个项目。然后单元格类相应地改变视觉外观并显示一个 UITextField。每当用户在此处输入数据时按下键盘上的完成,ProjectsViewController (CollectionView viewcontroller) 就会从自定义类获取通知以重新保存项目。那么如何保存新的 _objects 呢?
具体我需要编辑一个单元格(完成),编辑_objects中的相应项目并重新保存_objects。我怎样才能做到这一点?
我的自定义类:
ProjectCell.h:
#import <UIKit/UIKit.h>
@interface ProjectCell : UICollectionViewCell
@property (weak, nonatomic) IBOutlet UILabel *projectLabel;
@property (weak, nonatomic) IBOutlet UILabel *projectCount;
@property (weak, nonatomic) IBOutlet UITextField *projectTextField;
@property (weak, nonatomic) IBOutlet UILabel *editModeLabel;
@property (nonatomic, assign) BOOL editMode;;
-(void)editProject;
@end
ProjectCell.m:
#import "ProjectCell.h"
#import "QuartzCore/CALayer.h"
@implementation ProjectCell
@synthesize editMode;
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}
-(void)awakeFromNib {
// Custom initial code
[_projectTextField setDelegate:self];
[_projectTextField setReturnKeyType:UIReturnKeyDone];
[_projectTextField addTarget:self
action:@selector(editingFinished:)
forControlEvents:UIControlEventEditingDidEndOnExit];
}
- (IBAction)editingFinished:(id)sender
{
// Update the project cell visually
_projectLabel.text = _projectTextField.text;
// disable editMode and update the project cell
editMode = NO;
_projectTextField.hidden = YES;
_editModeLabel.hidden = YES;
// Reload the MasterViewController
[[NSNotificationCenter defaultCenter] postNotificationName:@"saveNewProjects" object:self];
}
-(void)editProject {
if (editMode == YES) {
// disable editMode and update the project cell
editMode = NO;
_projectTextField.hidden = YES;
_editModeLabel.hidden = YES;
} else if (editMode == NO) {
// Enable editMode and update the project cell
editMode = YES;
_projectTextField.hidden = NO;
_editModeLabel.hidden = NO;
}
}
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
// Drawing code
}
*/
@end
ProjectsViewController.m
只要用户在编辑单元格时按下“完成”,就会调用此方法。 我试图循环浏览每个项目并“重新创建” NSMutableArray 但我 不要认为这是一个很好的方法。
- (void)resaveProjects:(NSNotification *)notification {
// Edit the edited projects and save all again
editedProjects = editedProjects - 1;
NSMutableArray *newObjects;
int objectsCount = _objects.count;
for (int i = 0; i < objectsCount; i++) {
// Initialize objects
if (!newObjects) {
newObjects = [[NSMutableArray alloc] init];
}
}
}
您认为最好的方法是什么?我该如何进行?
谢谢!
编辑:
读取_objects:
NSMutableArray *_objects;
_objects = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"myProjects"]];
【问题讨论】:
标签: ios objective-c uitableview nsmutablearray nsuserdefaults