Так что я, кажется, провел последние пару дней, пытаясь найти для этого различные решения, и решил, что, наверное, лучше всего, что я просто спрошу кого-то. Я использую раскадровку, и я посылаю массив из одного ViewController в другой только отлично. Но однажды в этом SecondViewController у меня возникла проблема с этим. Затем я хотел бы иметь доступ к массиву в подзаголовке этого контроллера представления, чтобы иметь возможность рисовать график с данными, но всякий раз, когда я пытаюсь, я всегда получаю нуль от кода в подзапросе, хотя он определенно находится в ParentViewController , Может кто-то, пожалуйста, взгляните на мой текущий код и дайте мне знать, как я получу эти данные в своем подзаголовке.Извлечь массив из контроллера родительского просмотра в подвале
ParentViewController.h
#import <UIKit/UIKit.h>
#import "GraphView.h"
#import "Model.h"
@interface GraphViewController : UIViewController
@property (strong) Model *model;
@property (weak) GraphView *graph;
@property (strong) NSArray *data;
@end
ParentViewController.m
#import "GraphViewController.h"
@interface GraphViewController()
@end
@implementation GraphViewController
@synthesize graph;
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
NSLog(@"Model data: %@",self.data);//prints just fine
[self.graph setNeedsDisplay];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
SubView.h
#import <UIKit/UIKit.h>
#import "Model.h"
@interface GraphView : UIView
@property (weak) NSArray *array;
@property (strong) Model *model;
@end
Subview.m
#import "GraphView.h"
#import "GraphViewController.h"
@implementation GraphView
- (id)initWithFrame:(CGRect)frame dataArray:(NSArray*)data {
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}
- (void)drawRect:(CGRect)rect {
// Drawing code
NSLog(@"Draw Rect");
NSLog(@"%@", self.array);//The bit that keeps returning null
if (self.array != nil){
NSLog(@"Drawing Rect");
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextBeginPath(ctx);
CGContextMoveToPoint(ctx, 160, 100);
CGContextAddLineToPoint(ctx,260,300);
CGContextAddLineToPoint(ctx,60,300);
CGContextClosePath(ctx);
[[UIColor blueColor] setFill];
[[UIColor greenColor] setStroke];
CGContextSetLineWidth(ctx,2.0);
CGContextDrawPath(ctx,kCGPathFillStroke);
}
}
Теперь я знаю, что он будет возвращать нуль сейчас, потому что я на самом деле не назначая его к чему-либо, но я попытался так много различных способов, чтобы пытаться присвоить его в массив данных в контроллере родительского представления я забыл, как я даже начал. Любая помощь приветствуется!
Где вы настройки вида в 'ParentViewController'? Кроме того, насколько мне известно, вам не нужно «setNeedsDisplay» в родительском элементе. – JaredH
Вид устанавливается с помощью конструктора интерфейса, а затем устанавливается в класс. Затем делается ссылка на график @property (слабый) GraphView *; Этот стиль настройки работает для меня с другими представлениями, хотя эти представления в моем приложении не нуждаются в массиве, отправляющем их – cjbatin