не может передать объект obj-c obj другому представлению - PullRequest
1 голос
/ 03 февраля 2012

У меня есть 3 класса

Первый -> MainViewController:

@interface MainViewController : UIViewController {
    UtilityBadah *utility;

    }
    @property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;
    - (IBAction)option;
    @end

    @implementation MainViewController
    @synthesize managedObjectContext = _managedObjectContext;
    (IBAction)option{
    UtilityBadah *util = [[UtilityBadah alloc] initWithContext:_managedObjectContext];
    OptionController *ovc = [[OptionController alloc] init];
    ovc.util = util;
    ovc.managedObjectContext = _managedObjectContext;    
    [self.navigationController pushViewController:ovc animated:YES];
    [util release];
    [ovc release];
    }

    @end

Второй -> UtilityBadah:

@interface UtilityBadah : NSObject {

NSManagedObjectContext *managedObjectContext;
NSString *kitab;
NSString *lagu;
NSString *font;
NSString *sizefont;
}
@property (nonatomic, retain) NSManagedObjectContext *managedObjectContext;
@property (nonatomic, retain) NSString *kitab;
@property (nonatomic, retain) NSString *lagu;
@property (nonatomic, retain) NSString *font;
@property (nonatomic, retain) NSString *sizefont;
(id) initWithContext: (NSManagedObjectContext *) context;
@end

@implementation UtilityBadah
@synthesize managedObjectContext;
@synthesize kitab;
@synthesize lagu;
@synthesize font;
@synthesize sizefont;

-(id) initWithContext: (NSManagedObjectContext *) context {
NSError *err;
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *enDesc = [NSEntityDescription entityForName:@"OptionDB" inManagedObjectContext:context];
[request setEntity:enDesc];
NSArray *arrData = [context executeFetchRequest:request error:&err];

for (OptionDB *data in arrData) {
lagu = data.lagu;
kitab = data.kitab;
font = data.font;
sizefont = data.sizefont;
}
return self;
} 

Thrid -> OptionController:

@interface OptionController : UIViewController{

    NSManagedObjectContext *managedObjectContext;
    UtilityBadah *util;
}

@property (nonatomic, retain) NSManagedObjectContext *managedObjectContext;
@property (nonatomic, retain) UtilityBadah *util;
@end

(UITableViewCell *)tableView:(UITableView *)tableView
         cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    bla..bla..

    NSLog(@"value is %@",self.util.kitab);
    cell.textLabel.text = [listData objectAtIndex:row];    
    return cell;
}

Интересно, почему этот кусок кода:

NSLog(@"value is %@",self.util.kitab);

вызывает ошибку? «Получил сигнал:« EXC_BAD_ACCESS »?.

Большое спасибо за любой ответ.

PS что не так с моей информацией об ошибках xcode 4.2, почему она всегда показывает "Программа получила сигнал:" EXC BAD ACCESS "?разве это не может быть информативным?

Ответы [ 4 ]

1 голос
/ 03 февраля 2012

Я думаю, что ваш метод инициализации неправильный, попробуйте присвоить себя [super init] в начале и выполнить все ваши настройки после проверки этого себя! = Nil. это основная форма init:

- (id)init
{
    self = [super init];
    if (self)
        //do setup
    return self;
}

также вы используете подкласс NSObject и связываете с ним контекст управляемого объекта, вам следует более подробно изучить основные данные, вам следует использовать NSManagedObject s

0 голосов
/ 03 февраля 2012

Вам нужно сначала выделить эти объекты.Вот как должен выглядеть ваш метод initWithContext:

-(id) initWithContext: (NSManagedObjectContext *) context {
    self = [super init];
    if (self) {
        NSError *err;
        NSFetchRequest *request = [[NSFetchRequest alloc] init];
        NSEntityDescription *enDesc = [NSEntityDescription entityForName:@"OptionDB" inManagedObjectContext:context];
        [request setEntity:enDesc];
        NSArray *arrData = [context executeFetchRequest:request error:&err];

        for (OptionDB *data in arrData) {
            self.lagu = [NSString stringWithString:data.lagu];
            self.kitab = [NSString stringWithString:data.kitab];
            self.font = [NSString stringWithString:data.font];
            self.sizefont = [NSString stringWithString:data.sizefont];
        }
    }
    return self;
}
0 голосов
/ 03 февраля 2012

В классе UtilityBadah, метод initWithContext измените цикл for следующим образом

for (OptionDB *data in arrData) {
  self.lagu = data.lagu;
  self.kitab = data.kitab;
  self.font = data.font;
  self.sizefont = data.sizefont;
}

В вашем случае значение не сохраняется, поскольку вы присвоили его без доступа через свойство.

0 голосов
/ 03 февраля 2012

Имя свойства в OptionController равно util, а не utility

Если вы хотите получить доступ к свойству utility в классе UtilityBadah, вам придется сделать:

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