所以我有一个类" WishListItem",一个TableViewController和一个ViewController。我在保存数据块并从TableViewController中检索数据时遇到了困难吗?如何有效地做到这一点?
这是我的ViewController,它有一个prepareForSegue,可以将数据存储到我的WishListItem类中。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
NSDate *myDate = self.targetDatePicker.date;
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"MMM d, YYYY"];
NSString *prettyVersion = [dateFormat stringFromDate:myDate];
if (sender != self.addWishListButton) return;
if (self.wishTextField.text.length > 0) {
self.wishItem = [[WishlistItem alloc] init];
self.wishItem.wishlistItem = self.wishTextField.text;
self.wishItem.descWishItem = self.descTextField.text;
self.wishItem.targetDate = prettyVersion;
}
}
WishListItem.h:
@interface WishlistItem : NSObject
@property NSString *wishlistItem;
@property NSString *descWishItem;
@property NSString *targetDate;
@end
ViewController.h:
@interface JLSViewController : UIViewController
@property (strong, nonatomic) IBOutlet UIBarButtonItem *addWishListButton;
@property (strong, nonatomic) IBOutlet UITextField *wishTextField;
@property (strong, nonatomic) IBOutlet UITextField *descTextField;
@property (strong, nonatomic) IBOutlet UIDatePicker *targetDatePicker;
@property WishlistItem *wishItem;
@end
从这里开始。我想在每次添加wishItem时保存它。我如何存储MULTIPLE ENTRIES?并同时在我的TableViewController中检索这些条目?
如果我需要提供更多信息,请告诉我。 TIA。
答案 0 :(得分:1)
最简单和最粗鲁的方法是将数据存储在NSUserDefaults中
+(void)userDefaultsSetObject:(id)userObject forKey:(NSString *)userKey
{
NSUserDefaults *userDefaults=[NSUserDefaults standardUserDefaults];
[userDefaults setObject:userObject forKey:userKey];
[userDefaults synchronize];
}
/**
* This method helps to get values from NSUserDefaults
*/
+(id)userDefaultsGetObjectForKey:(NSString *)userKey
{
NSUserDefaults *userDefaults=[NSUserDefaults standardUserDefaults];
return [userDefaults objectForKey:userKey];
}
使用以上两个函数来保存和检索NSUserDefaults中的数据。所以在这里遇到问题,将wishlistitem对象添加到数组并在NSUserDefaults中设置它。将此代码添加到tableviewcontroller类,并将数据源数组作为全局变量。
NSMutableArray *dataSourceArray;
在tableviewcontroller类的ViewDidLoad中添加这个,
NSMutableArray *wishlistItems;
if([self userDefaultsGetObjectForKey:@"WishListItems"]==nil)
{
wishlistItems = [NSMutableArray array];
}
else
{
wishlistItems = [self userDefaultsGetObjectForKey:@"WishListItems"];
}
dataSourceArray = [[NSMutableArray alloc] initWithArray:wishlistItems];
在tableViewDelegateMethod中,试试这个:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
return [dataSourceArray count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
if(cell == nil)
{
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
WishlistItem *wishListObject = [dataSourceArray objectAtIndex:indexPath.row];
[cell.textLabel setText:wishListObject.wishlistItem];
[cell.detailTextLabel setText:wishListObject.descWishItem];
return cell;
}
所以每次添加内容都会这样做,
- (NSMutableArray*)wishListAdded:(WishlistItem*)wishList
{
NSMutableArray *wishlistItems;
if([self userDefaultsGetObjectForKey:@"WishListItems"]==nil)
{
wishlistItems = [NSMutableArray array];
[wishlistItems addObject: wishItem];
[self userDefaultsSetObject:wishlistItems forKey:@"WishListItems"];
}
else
{
wishlistItems = [self userDefaultsGetObjectForKey:@"WishListItems"];
[wishlistItems addObject:yourWishListObject];
[self userDefaultsSetObject:wishlistItems forKey:@"WishListItems"];
}
return wishlistItems;
}
答案 1 :(得分:1)
要保存阵列状态,请使用此视图,即在视图控制器中
NSString *valueToSave = @"someValue";
[[NSUserDefaults standardUserDefaults] setObject:valueToSave forKey:@"preferenceName"];
[[NSUserDefaults standardUserDefaults] synchronize];
在想要检索变量的地方使用它。 intableViewController
NSString *savedValue = [[NSUserDefaults standardUserDefaults]
stringForKey:@"preferenceName"];
答案 2 :(得分:1)
您可以使用mutablearrays保存wishlist类的多个对象,然后将该数组存储在userdefaults中并根据需要检索它。
对数组索引中的特定对象所做的任何更改都需要在用户默认值中更新,否则您将获得与首先存储的结果集相同的结果集。
答案 3 :(得分:0)
我认为您需要在TableViewController .h文件中创建@property WishlistItem *wishItem;
对象,并在segue方法中保存所有数据。这就是你的实现方式
TableViewController.h
中的
#import "WishlistItem.h"
@interface SomeTableViewController : UITableViewController
@property WishlistItem *wishItem
JLSViewController.m
中的
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
NSDate *myDate = self.targetDatePicker.date;
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"MMM d, YYYY"];
NSString *prettyVersion = [dateFormat stringFromDate:myDate];
if (sender != self.addWishListButton) return;
if (self.wishTextField.text.length > 0) {
SomeTableViewController *tableViewController = [segue destinationViewController];
tableViewController.wishItem = [[WishlistItem alloc] init];
tableViewController.wishItem.wishlistItem = self.wishTextField.text;
tableViewController.wishItem.descWishItem = self.descTextField.text;
tableViewController.wishItem.targetDate = prettyVersion;
}
}
TableViewController.m中的
您可以使用self.wishItem.wishlistItem
等填写tableview中的数据
如果你想保存大数据然后考虑使用核心数据,NSDateFormatter也是昂贵的操作,所以你可以参考这个link进行一些改进。
答案 4 :(得分:0)
有几种方法可以保存数据并检索它们:
<强> 1。将数据保存到NSUserDefaults (Anonymous建议的方式): 使用NSUserDefaults,您可以保存以下类类型中的对象: NSData,NSString,NSNumber,NSDate,NSArray,NSDictionary 试着看看文档,UserDefaults很容易理解和使用。 NSUserDefaults Doc
<强> 2。将数据保存到属性列表文件(plist) 它有点像UserDefaults(它可以存储相同的数据类型),区别在于您在文档中写入数据。 但是:不要将它保存在Document文件夹中,除非它适合存储在iCloud中,Apple说。 Reference
第3。将数据保存到数据库 这将是存储数据的另一种方式......
最后一切都取决于您想要保存的数据有多复杂,我们是在讨论字符串和数字或图像NSUserNotification等
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
NSDate *myDate = self.targetDatePicker.date;
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"MMM d, YYYY"];
NSString *prettyVersion = [dateFormat stringFromDate:myDate];
if (sender != self.addWishListButton) return;
if (self.wishTextField.text.length > 0)
{
NSMutableDictionary *dict = [[NSMutableDictionary alloc]init];
[dict setObject:self.wishTextField.text forKey:@"wishTextField"];
[dict setObject:self.descTextField.text forKey:@"descTextField"];
[dict setObject:prettyVersion forKey:@"prettyVersion"];
NSMutableArray *array = (NSMutableArray*)[userDefaults objectForKey:@"myWishList"];
//check if array is not null i`m not sure if it will give you error if it is null
// if null NSMutableArray *array= [NSMutableArray alloc]init]; else
[array addObject:dict];
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:array forKey:@"myWishList"];
}
}
我认为这应该有助于储蓄。用于加载:
中的数据- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath // methode
//add this
NSMutableArray *array = (NSMutableArray*)[userDefaults objectForKey:@"myWishList"];
// this will return all your wishlist items
NSMutableDictionary *dict = [array objectAtIndex:indexPath.row];
// this will give you the data you saved in the particular place
cell.textLabel.text = [dict objectForKey:@"wishTextField"];//this will be the name of the whishlist
我认为应该这样做