在本例中,我的NSDictionary使用0个键/值对进行初始化,如我的调试器中所示。当我在我的ViewController中做完全相同的事情时,它会正确地初始化,但我更喜欢坚持MVC设计,在我的模型中有NSDictionary。
ShakespeareViewController.h
#import <UIKit/UIKit.h>
@interface ShakespeareViewController : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *sonnetDisplay;
@endShakespeareViewController.m
#import "ShakespeareViewController.h"
#import "ShakespeareModel.h"
@interface ShakespeareViewController ()
@property (nonatomic, strong) ShakespeareModel *sonnet;
@end
@implementation ShakespeareViewController
@synthesize sonnetDisplay = _sonnetDisplay;
@synthesize sonnet = _sonnet;
- (IBAction)sonnetButton:(UIButton *)sender
{
self.sonnetDisplay.text = [self.sonnet grabSonnet:@"19"];
}
@endShakespeareModel.h
#import <Foundation/Foundation.h>
@interface ShakespeareModel : NSObject
-(NSString *)grabSonnet:(NSString *)atNumber;
@endShakespeareModel.m
#import "ShakespeareModel.h"
@interface ShakespeareModel()
@property (nonatomic, strong) NSDictionary *sonnets;
@end
@implementation ShakespeareModel
@synthesize sonnets = _sonnets;
-(NSDictionary *)sonnets
{
if (!_sonnets)
{
_sonnets = [[NSDictionary alloc] initWithObjectsAndKeys:@"19", @"19", nil];
}
return _sonnets;
}
-(NSString *)grabSonnet:(NSString *)atNumber
{
NSString *chosenSonnet = [self.sonnets objectForKey:@"19"];
return chosenSonnet;
}
@end任何关于我做错了什么的想法都是非常感谢的。我不明白为什么这不能用键值为19的对象19初始化。
发布于 2012-03-30 00:35:01
我没有看到任何地方可以将视图控制器的sonnet属性设置为ShakespeareModel的一个实例--所以当您调用grabSonnet:时,您就是在向nil发送一条消息(因此什么也得不到。
在调用grabSonnet:之前,您应该将self.sonnet = [[ShakespeareModel alloc] init]放入视图控制器中。可能在初始化器或-viewDidLoad中。
https://stackoverflow.com/questions/9929304
复制相似问题