IOS 프로그래밍에 익숙하지 않고 코어 데이터 개념을 익히고 있습니다. Apple 설명서의 지침을 따르십시오. 나는 테이블 뷰 컨트롤러와 가변 배열 인 StocksArray를 속성 중 하나로 갖고있다. 다른 뷰인 DetailedController가 코어 데이터 모델의 엔티티 속성에 대한 사용자 입력을 얻는 데 사용됩니다. NSManagedObject를 DetailedController 개체로 전달하고 대리자를 사용하여 변경 가능한 배열 StocksArray를 업데이트합니다. 컴파일 할 때 오류가 발생했습니다. 'NSInvalidArgumentException'이라는 캐치되지 않은 예외로 인해 응용 프로그램을 종료합니다. 이유 : '* - [NSMutableArray insertObject : atIndex :] : 0'에 개체를 삽입하지 않습니다. 누군가가 나를 도울 수 있다면 정말로 감사 할 것입니다.코어 데이터에 객체 전달하기
#import"StockEntity.h"
@protocol DetailedControllerdelegate <NSObject>
-(void)addstockinarray:(StockEntity*)anObject;
@end
@interface DetailedController : UIViewController {
IBOutlet UITextField* stocksymboltextfield;
IBOutlet UITextField* stocknametextfield;
//NSManagedObjectContext* context2;
StockEntity* asinglestock;
}
@property (nonatomic, retain) IBOutlet UITextField* stocksymboltextfield;
@property (nonatomic, retain) IBOutlet UITextField* stocknametextfield;
//@property(nonatomic, retain) NSManagedObjectContext* context2;
@property(nonatomic, retain) StockEntity* asinglestock;
@property (nonatomic, assign) id <DetailedControllerdelegate> delegate;
@implementation DetailedController
@synthesize stocksymboltextfield, stocknametextfield,asinglestock, delegate;//context2;
-(void)onDone:(id)sender{
[asinglestock setStockName:self.stocknametextfield.text];
[asinglestock setStockSymbol:self.stocksymboltextfield.text];
NSLog(@"lets s see: %@", [asinglestock StockName]);
NSError *error = nil;
if (![[asinglestock managedObjectContext] save:&error]) {
//handle the error
}
if ([delegate respondsToSelector:@selector(addstockinarray:)]) {
NSLog(@"before delegate");
[delegate addstockinarray:asinglestock];
NSLog(@"am in delegate");
}
[self.navigationController popViewControllerAnimated:YES];
}
그리고 이것은 테이블 뷰
@implementation maintable
@synthesize stocksArray, managedObjectContext, addButton;
- (id)initWithStyle:(UITableViewStyle)style {
self = [super initWithStyle:style];
if (self) {
// Custom initialization.
self.stocksArray =[[NSMutableArray alloc]init];
}
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
//self.stocksArray =[[NSMutableArray alloc]init];
self.title = @"Stocks";
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
self.navigationItem.leftBarButtonItem = self.editButtonItem;
addButton = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemAdd
target:self
action:@selector(addStock)];
//addButton.enabled = NO;
self.navigationItem.rightBarButtonItem = addButton;
}
-(void) addStock{
DetailedController *detail = [[DetailedController alloc]initWithNibName:NSStringFromClass([DetailedController class]) bundle:[NSBundle mainBundle]];
//detail.context2 = managedObjectContext;
StockEntity *stock = (StockEntity*)[NSEntityDescription insertNewObjectForEntityForName:@"StockEntity"
inManagedObjectContext:managedObjectContext];
detail.asinglestock = stock;
detail.delegate = self;
//[stocksArray insertObject:stock atIndex:0];
[self.navigationController pushViewController:detail animated:YES];
[detail release];
}
-(void)addstockinarray:(StockEntity*)anObject{
if (anObject = NULL) {
NSLog(@"YESSS");
}
[self.stocksArray addObject:anObject];
NSLog(@"LETTTTTT: %i", [self.stocksArray count]);
}
- (void)viewWillAppear:(BOOL)animated {
[self.tableView reloadData];
[super viewWillAppear:animated];
}