我有一个基于标签栏的应用程序,标签上有TableViewController
。
当我更新我的应用时,我向我的Table
添加了一个新行。
我想要做的是在插入一个新的TableViewController
行后,立即存储一行的高亮颜色,至少3个会话。
我知道我必须使用NSUserDefaults
,但是,在哪里?
我的意思是:我应该将它用于我的rowViewController
(UIViewController
)还是TableViewController
(我有所有行)?
如何将单元格属性导入UIViewController
(如果在那里我必须使用NSUserDefaults
)?
我有类似的东西:
- (void) applicationDidFinishLaunching:(NSNotification*) notice {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
}
[[NSUserDefaults standardUserDefaults] setInteger:0 forKey:cell];
if ([(NSInteger*)[[NSUserDefaults standardUserDefaults] integerForKey:cell] intValue] < 3) {
// render highlighted...
} else {
// render normal
} }
我不能这样做因为它是一个UIViewController,对吧?然后在.h at
@interface rowViewController : UIViewController
我应该添加一些东西以实现单元格,然后设置其属性(颜色)?
提前致谢。
答案 0 :(得分:1)
您可以按照问题的方式执行此操作,但代码中存在严重问题。你使用NSInteger就好像它是一个对象,而它是一个原子类型。
请勿混淆NSInteger
和NSNumber
:
NSNumber
是一个旨在将数字封装在Objective-C对象中的类,以便您可以在请求NSObjects
的地方使用它(就像您希望将它们存储在NSDictionaries
中一样)NSInteger
是整数类型的别名(typedef)。使用它与使用int
。因此,在您的代码中,NSUserDefaults
的{{1}}和setInteger:forKey:
使用NSInteger值(即原子值,而不是对象)。无需使用integerForKey:
和*
然后检索真正的价值,您已经拥有它! (你编写的代码肯定会崩溃,将整数值解释为指向内存地址的指针!)
此外,您无法将此单元格用作intValue
的密钥。 NSUserDefaults
只接受键的字符串,而且NSUserDefaults
会被重复使用(每次滚动时都会回收)并且不会持久。您应该构建一个使用单元格UITableViewCells
的字符串,并将其用于NSIndexPath
键;然后将单元格/行的背景颜色存储在NSUserDefaults
中的给定位置(无论如何,在MVC设计模式中更好地分离模型和视图)。
UITableView
请注意,// Build a string from the IndexPath that will be used as a unique key for your userdefaults, to store info on the corresponding row in your tableview
NSString* key = [NSString stringWithFormat:@"bkg_%i:%i",indexPath.section,indexPath.row];
[[NSUserDefaults standardUserDefaults] setInteger:0 forKey:key];
if ([[NSUserDefaults standardUserDefaults] integerForKey:key] < 3)
{
// render highlighted...
} else {
// render normal
}
可以看作是对integerForKey:
的调用(在您的情况下会返回objectForKey:
,通常是NSObject
,这是一个封装了整数值)然后调用NSNumber
。
integerValue