Как отправить объект? - PullRequest
0 голосов
/ 20 июня 2010

Я работаю в target-C, пытаясь написать приложение для iphone.

Справочная информация: Есть контроллер навигации, управляющий моими контроллерами представления. Мой FirstLevelViewController для viewDidLoad создает несколько объектов SecondLevelViewController, сохраняет их в массиве и затем загружает их при нажатии различных ячеек таблицы. Кроме того, в viewDidLoad мой FirstLevelViewController создает экземпляр класса для хранения переменных об этом объекте. Может быть несколько экземпляров этого класса, и поэтому я бы предпочел не создавать синглтон.

Различные контроллеры представления хотели бы сообщать объект данных. Как я могу это сделать? Контроллер firstlevelview может отправить ему сообщение, потому что он создал по крайней мере первый. Контроллеры представления второго уровня действуют так, будто не знают, что объект данных существует.

Я знаю его основную. Я знаю, что есть много знаний о смысле жизни, вселенной и всего остального. Является ли ответ на заявку ответчиком? Не в способе хранения одноэлементных данных, а как способ обмена сообщениями между классами? Нужны ли ссылки или указатели?

Я действительно ценю помощь. Я терял сон из-за этого в течение недели, и я теряю свои шарики. Спасибо.

FirstLevelViewController

#import <Foundation/Foundation.h>

@interface FirstLevelViewController : UITableViewController 
<UITableViewDataSource, UITableViewDelegate> {
NSArray *controllers;
}

@property (nonatomic, retain) NSArray *controllers; 


@end


#import "FirstLevelViewController.h"
#import "BirthDay.h"
#import "Height.h"
#import "Model.h"


@implementation FirstLevelViewController
@synthesize controllers; 

-(void)viewDidLoad {


NSMutableArray  *array = [[NSMutableArray alloc]init];

Model *frank = [[Model alloc]init]; 
frank.date = @"Oh No You Didn't"; 
self.title = [frank date]; 


BirthDay *birthday = [[BirthDay alloc]initWithNibName:@"Birthday" bundle:nil]; 
birthday.title = @"Birth Date"; 

[array addObject:birthday];
[birthday release]; 

Height *height = [[Height alloc]initWithNibName:@"Height" bundle:nil]; 
height.title = @"Height"; 
[array addObject:height]; 
[height release];   

self.controllers = array; 

ModelClass (Класс данных)

#import <Foundation/Foundation.h>
#import "FirstLevelViewController.h"
#import "BirthDay.h"
#import "model.h"


@interface Model : NSObject {
    NSString *date; 
}

@property (nonatomic, retain) NSString *date; 
@end


#import "Model.h"

@implementation Model
@synthesize date; 


@end

SecondLevelViewController

@interface BirthDay : UIViewController <UIPickerViewDelegate, UIPickerViewDataSource>{

    UILabel *dateLabel;
    UIPickerView *datePicker; 


}

@property (nonatomic, retain) IBOutlet UILabel *dateLabel; 
@property (nonatomic, retain) IBOutlet UIPickerView *datePicker; 

@end


#import "BirthDay.h"
#import "FirstLevelViewController.h"
#import "Model.h"

@implementation BirthDay
@synthesize datePicker;
@synthesize dateLabel; 

-(IBAction)updateLabel {

    NSDate *dateOfBirth = [datePicker date]; 
    NSDate *todaysDate = [NSDate date]; 

    NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSUInteger unitFlags = NSMonthCalendarUnit | NSDayCalendarUnit; 

    NSDateComponents *components = [gregorian components:unitFlags fromDate:dateOfBirth toDate:todaysDate options:0]; 
    NSInteger months = [components month]; 
    NSInteger days = [components day];

    float Months = months; 
    if (days > 14) {
        Months = Months + 0.5; 
    }




    NSString *message = [[NSString alloc]initWithFormat: @"%.1f Months and %d Days old", Months, days];

    dateLabel.text = message; 

}

@end

(В принципе, я хотел бы, чтобы ярлык обновления при вызове обновлял не только ярлык, но и объект с именем frank.)

1 Ответ

1 голос
/ 20 июня 2010

Вы можете отправлять уведомления с вашего SecondLevelViewController и так далее.Объект данных или ваш FirstLevelViewController могут затем зарегистрироваться для таких уведомлений и выполнить обработку по мере необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...