I have encountered this error when i click on the label at the Master View that leads to the Detail view (which should show the labels as displayed in the data model at ReasonLibrary.
My code:
Master View Controller header
@interface MasterViewController : UIViewController
@property (strong, nonatomic) IBOutletCollection(UILabel) NSArray *reasonLabelViews;
@end
Master View Controller implementation
#import "MasterViewController.h"
#import "DetailViewController.h"
#import "Reasons.h"
@interface MasterViewController ()
@end
@implementation MasterViewController
- (void)viewDidLoad {
[super viewDidLoad];
for (NSUInteger index = 0; index < self.reasonLabelViews.count; index++) {
Reasons *reason = [[Reasons alloc] initWithIndex:index];
UILabel *reasonLabelView = self.reasonLabelViews[index];
reasonLabelView.text = reason.reasonsRazao;
}
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
UILabel *reasonLabelView = (UILabel *)[sender view];
if ([self.reasonLabelViews containsObject:reasonLabelView]) {
NSUInteger index = [self.reasonLabelViews indexOfObject:reasonLabelView];
DetailViewController *detailViewController = (DetailViewController *)segue.destinationViewController;
detailViewController.reason = [[Reasons alloc] initWithIndex:index];
}
}
- (IBAction)showReasonDetail:(id)sender {
[self performSegueWithIdentifier:@"showReasonDetail" sender:sender];
}
@end
Detail View Controller header
#import <UIKit/UIKit.h>
@class Reasons;
@interface DetailViewController : UIViewController
@property (strong, nonatomic) Reasons *reason;
@property (weak, nonatomic) IBOutlet UILabel *reasonLabel;
@property (weak, nonatomic) IBOutlet UILabel *motiveLabel;
@property (weak, nonatomic) IBOutlet UILabel *zeroFiveLabel;
@end
Detail View Controller implementation
#import "DetailViewController.h"
#import "Reasons.h"
@interface DetailViewController ()
@end
@implementation DetailViewController
- (void)viewDidLoad {
[super viewDidLoad];
if (self.reason) {
self.reasonLabel.text = self.reason.reasonsRazao;
self.motiveLabel.text = self.reason.randomFact;
self.zeroFiveLabel.text = self.reason.reasonsDeZeroACinco;
}
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
ReasonsLibrary header
#import <Foundation/Foundation.h>
extern NSString *const kRazao;
extern NSString *const kMotivo;
extern NSString *const kDeZeroACinco;
@interface ReasonLibrary : NSObject
@property (strong,nonatomic) NSArray *library;
- (NSString *)randomFact;
@end
ReasonsLibrary implementation
#import "ReasonLibrary.h"
@implementation ReasonLibrary
NSString *const kRazao = @"razao";
NSString *const kMotivo = @"motivo";
NSString *const kDeZeroACinco = @"dezeroacinco";
- (instancetype)init
{
self = [super init];
if (self) {
_library = @[@{kRazao: @"Razao 1",
kMotivo: @[@"Por que sim",@"Por que demais",@"Por que muito",@"Por que foda",@"Por que top",@"Por que demasiado"],
kDeZeroACinco: @"1",
},
@{kRazao: @"Razao 2",
kMotivo: @[@"Por que sim",@"Por que demais",@"Por que muito",@"Por que foda",@"Por que top",@"Por que demasiado"],
kDeZeroACinco: @"2",
},
@{kRazao: @"Razao 3",
kMotivo: @[@"Por que sim",@"Por que demais",@"Por que muito",@"Por que foda",@"Por que top",@"Por que demasiado"],
kDeZeroACinco: @"3",
},
@{kRazao: @"Razao 4",
kMotivo: @[@"Por que sim",@"Por que demais",@"Por que muito",@"Por que foda",@"Por que top",@"Por que demasiado"],
kDeZeroACinco: @"4",
},
@{kRazao: @"Razao 5",
kMotivo: @[@"Por que sim",@"Por que demais",@"Por que muito",@"Por que foda",@"Por que top",@"Por que demasiado"],
kDeZeroACinco: @"5",
},
@{kRazao: @"Razao 6",
kMotivo: @[@"Por que sim",@"Por que demais",@"Por que muito",@"Por que foda",@"Por que top",@"Por que demasiado"],
kDeZeroACinco: @"6",
}
];
}
return self;
}
- (NSString *)randomFact {
int random = arc4random_uniform((int)self.library.count);
return [self.library objectAtIndex:random];
} @end
Reasons header
#import <Foundation/Foundation.h>
@interface Reasons : NSObject
@property (strong, nonatomic) NSString *reasonsRazao;
@property (strong, nonatomic) NSString *reasonsMotivo;
@property (strong, nonatomic) NSString *reasonsDeZeroACinco;
@property (strong, nonatomic) NSString *randomFact;
-(instancetype)initWithIndex:(NSUInteger)index;
@end
Reasons implementation
#import "Reasons.h"
#import "ReasonLibrary.h"
@implementation Reasons
-(instancetype)initWithIndex:(NSUInteger)index {
self = [super init];
if (self) {
ReasonLibrary *reasonlibrary = [[ReasonLibrary alloc] init];
NSArray *library = reasonlibrary.library;
NSDictionary *reasonsDictionary = library[index];
_reasonsRazao = [reasonsDictionary objectForKey:kRazao];
_reasonsMotivo = [reasonsDictionary objectForKey:kMotivo];
_reasonsDeZeroACinco = [ reasonsDictionary objectForKey:kDeZeroACinco];
}
return self;
}
@end