我有这个名为myWallet的可变数组及其属性声明:
@property (nonatomic, strong) NSMutableArray *myWallet;
Run Code Online (Sandbox Code Playgroud)
这个数组正在被卡片填充,这是一个对象.我从另一个View Controller创建了一个新的Card实例,所以我使用了一个委托方法,能够在我的初始View Controller(表视图控制器)上传递这个创建的卡.以下是委托方法
- (void)addCardViewController:(AddCardViewController *)sender didCreateCard:(Card *)newCard
{
// insert a new card
self.myCard = newCard;
[self.myWallet addObject:self.myCard];
[self.tableView reloadData];
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我可以创建新的Card实例,当我这样做时,我的初始视图控制器(Card Wallet VC)中会出现一个新的表格单元格.
我想要的是当用户完成使用该应用程序时,他/她之前创建的卡片的创建实例仍会出现在应用程序的下一个运行时间.所以我使用NSUserDefaults来做到这一点.下面的方法是我如何使用NSUserDefaults保存.
- (void)saveMyWallet
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:self.myWallet forKey:@"myWalletArray"];
[defaults synchronize];
NSLog(@"I am saved");
}
Run Code Online (Sandbox Code Playgroud)
我在didSelectRowAtIndexPath中调用此方法.当我运行应用程序,然后创建一个新的卡实例,单击表格单元格,这将显示在我的日志中.
2012-05-04 14:51:00.900 CardWallet[24998:f803] *** -[NSUserDefaults setObject:forKey:]: Attempt to insert non-property value '("<Card: 0x6aa02f0>")' of class '__NSArrayM'.
Note that dictionaries and arrays in property lists must also contain only property values. …Run Code Online (Sandbox Code Playgroud) 只是好奇,如果有一个现有的故事板版本的Facebook集成,因为我已经谷歌搜索约2天.到目前为止,我可以为我的应用程序授权,我想到的是尝试将一个简单的状态消息从我的应用程序发布到我的Facebook新闻源.大多数演示/教程我已经通过使用厦门国际银行的,虽然如此.这是一个很好的教程,但我想要一个故事板版本.告诉我,如果这篇文章是一个骗局,请发布这个问题,以便我可以研究它.
我知道这里有很多知道分享的想法:)所以任何有用的链接都非常感谢,因为它会在某种程度上提升我的学习经验以及其他开始iOS开发的人:)
谢谢!
我目前正在使用具有图形功能的计算器应用程序.那么,我在我的计算器中有这个按钮,并将它连接到我的Calculator2ViewController上.此外,我将此按钮连接到另一个名为GraphViewController的UIViewController,并将segue的标识符命名为showGraph.下面是我的segue的代码.
- (GraphViewController *)graphViewController {
return [self.splitViewController.viewControllers lastObject];
}
- (IBAction)graphPressed {
if ([self graphViewController]) {
[[self graphViewController] setProgram:self.brain.program];
}
else {
[self performSegueWithIdentifier:@"showGraph" sender:self];
}
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
[segue.destinationViewController setProgram:self.brain.program];
}
Run Code Online (Sandbox Code Playgroud)
那里,没有错误和警告.但是当我尝试运行应用程序并按下Graph按钮时,应用程序崩溃并在我的控制台上获取此信息.
2012-06-18 11:08:17.272 Calculator2[1135:f803] -[Calculator2ViewController graphPressed:]: unrecognized selector sent to instance 0x6c38850
2012-06-18 11:08:17.273 Calculator2[1135:f803] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Calculator2ViewController graphPressed:]: unrecognized selector sent to instance 0x6c38850'
Run Code Online (Sandbox Code Playgroud)
请告诉我这是为什么会发生这种情况,我怎样才能以更好的方式做到这一点.谢谢!
编辑:
更改- (IBAction)graphPressed到- (IBAction)graphPressed:(id)sender.segue现在有效.但是,我在我的控制台上有这个通知(这有点可怕) …
我有这个方法来保存一个名为myWallet的可变数组,该数组包含Class Card的实例.
- (void)saveMyWallet
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:[NSKeyedArchiver archivedDataWithRootObject:self.myWallet] forKey:@"myWalletArray"];
[defaults synchronize];
}
Run Code Online (Sandbox Code Playgroud)
我有的卡类有三个实例变量:名称,引脚和点.到目前为止,在UserDefaults中保存卡的新实例是可以的.我只是想知道我如何能覆盖点的值,因为正如我在点的计算进行,我想更新它的一些建议.
这是我的卡类
Card.h
#import <Foundation/Foundation.h>
@interface Card : NSObject <NSCoding>
@property (nonatomic, strong) NSString *name;
@property (nonatomic, strong) NSString *pin;
@property (nonatomic, strong) NSNumber *points;
@property (nonatomic, strong) NSMutableArray *pointsToDeduct;
- (double) subtractPoints: (double) requiredPoints;
- (void) encodeWithCoder:(NSCoder *)coder;
- (id) initWithCoder: (NSCoder *)coder;
@end
Run Code Online (Sandbox Code Playgroud)
Card.m
#import "Card.h"
@implementation Card
@synthesize name = _name;
@synthesize pin = _pin;
@synthesize points = _points;
@synthesize …Run Code Online (Sandbox Code Playgroud)