如果试图解决这个错误,我决定伸手去拿几个小时 救命。我继续得到同样的错误:
"由于未被捕获而终止应用 例外' NSInvalidArgumentException',原因:' *** - [__ NSCFConstantString stringByAppendingString:]:nil参数'"
#import <UIKit/UIKit.h>
@interface BrowseTableViewController : UITableViewController
@property (strong) NSMutableArray *emp; //An array to store all the information of clicked entries
@end
#import <CoreData/CoreData.h>
#import "BrowseClickViewController.h"
#import "ItemTableViewCell.h"
@interface BrowseTableViewController ()<UITableViewDelegate, UITableViewDataSource>
@end
@implementation BrowseTableViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.navigationItem.rightBarButtonItem = self.editButtonItem;
[self.tableView registerNib:[UINib nibWithNibName:@"ItemTableViewCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"Cell1"];
}
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
// Return YES if you want the specified item to be editable.
return YES;
}
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
//add code here for when you hit delete
[_emp removeObjectAtIndex:indexPath.row];
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
[tableView reloadData];
}
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
- (NSManagedObjectContext *)managedObjectContext
{
NSManagedObjectContext *context = nil;
id delegate = [[UIApplication sharedApplication] delegate];
if ([delegate performSelector:@selector(managedObjectContext)]) {
context = [delegate managedObjectContext];
}
return context;
}
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Employee"];
self.emp = [[managedObjectContext executeFetchRequest:fetchRequest error:nil] mutableCopy]; // Obtaining all the entries of persistance store to show in Table view
[self.tableView reloadData];
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return self.emp.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell1";
ItemTableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
NSManagedObject *empp = [self.emp objectAtIndex:indexPath.row]; //obtaining the informatio of selected row in empp object
[cell.itemName setText:[NSString stringWithFormat:@"%@", [empp valueForKey:@"name"]]];
[cell.quantityLabel setText:[NSString stringWithFormat:@"%@", [empp valueForKey:@"quantity"]]];
[cell.shopLabel setText:[NSString stringWithFormat:@"%@", [empp valueForKey:@"store"]]];
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
BrowseClickViewController *initViewController = [storyBoard instantiateViewControllerWithIdentifier:@"Click"];
[self.navigationController presentViewController:initViewController animated:YES completion:nil];
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{ //Segue which is called when user selects any row, and this segue modifies the value of emp object of BrowseClickViewController with the clicked row details.
if ([segue.identifier isEqualToString:@"recordClicked"]){
NSManagedObject *selectedEmp = [self.emp objectAtIndex:[[self.tableView indexPathForSelectedRow] row]];
BrowseClickViewController *destViewController = segue.destinationViewController;
destViewController.emp = selectedEmp;
}
}
@end
#import <UIKit/UIKit.h>
#import <CoreData/CoreData.h>
@interface BrowseClickViewController : UIViewController
@property (weak, nonatomic) IBOutlet UIScrollView *scroller;
@property (weak, nonatomic) IBOutlet UILabel *barcodeLabel;
@property (weak, nonatomic) IBOutlet UILabel *categoryLabel;
@property (weak, nonatomic) IBOutlet UILabel *nameLabel;
@property (weak, nonatomic) IBOutlet UILabel *priceLabel;
@property (weak, nonatomic) IBOutlet UILabel *quantityLabel;
@property (weak, nonatomic) IBOutlet UILabel *storeLabel;
@property (weak, nonatomic) IBOutlet UIImageView *imagePicture;
@property (strong) NSManagedObject *emp;
@property (weak, nonatomic) NSString *picLabel;
@end
#import "BrowseClickViewController.h"
#import "BrowseTableViewController.h"
#import <CoreData/CoreData.h>
#import "ItemTableViewCell.h"
@interface BrowseClickViewController ()
@end
@implementation BrowseClickViewController
- (NSManagedObjectContext *)managedObjectContext {
NSManagedObjectContext *context = nil;
id delegate = [[UIApplication sharedApplication] delegate];
if ([delegate performSelector:@selector(managedObjectContext)]) {
context = [delegate managedObjectContext];
}
return context;
}
- (void)viewDidLoad {
[super viewDidLoad];
_nameLabel.text=[@"Name:" stringByAppendingString:[self.emp valueForKey:@"name"]];
_barcodeLabel.text=[@"Barcode:" stringByAppendingString:[self.emp valueForKey:@"barcode"]];
_categoryLabel.text=[@"Category:" stringByAppendingString:[self.emp valueForKey:@"category"]];
_priceLabel.text=[@"Price:"stringByAppendingString:[self.emp valueForKey:@"price"]];
_quantityLabel.text=[@"Quantity:" stringByAppendingString:[self.emp valueForKey:@"quantity"]];
_storeLabel.text=[@"Store:" stringByAppendingString:[self.emp valueForKey:@"store"]];
_picLabel=[self.emp valueForKey:@"pic"];
_imagePicture.image=[self loadImage:_picLabel];
}
-(UIImage *)loadImage: (NSString *)name
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString* path = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithString:name]];
UIImage* image = [UIImage imageWithContentsOfFile:path];
return image;
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
@end
#import <UIKit/UIKit.h>
@interface ItemTableViewCell : UITableViewCell
@property (nonatomic, weak) IBOutlet UILabel *itemName;
@property (nonatomic, weak) IBOutlet UILabel *quantityLabel;
@property (nonatomic, weak) IBOutlet UILabel *shopLabel;
@end
#import "ItemTableViewCell.h"
#import "BrowseClickViewController.h"
@implementation ItemTableViewCell
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// Initialization code
}
return self;
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
[super setSelected:selected animated:animated];
// Configure the view for the selected state
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
BrowseClickViewController *initViewController = [storyBoard instantiateInitialViewController];
[self.window setRootViewController:initViewController];
}
@end
答案 0 :(得分:0)
最有可能的原因是你的一些附加字符串值是nil.Do防御性编码。检查下面的代码示例并相应地更改所有代码。
if([self.emp valueForKey:@"name"])
{
_nameLabel.text=[@"Name:" stringByAppendingString:[self.emp valueForKey:@"name"]];
}