Все свойства класса доступны из другого класса, КРОМЕ NSDictionary? Кто-нибудь знает почему? - PullRequest
0 голосов
/ 02 февраля 2012

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

Я пытаюсь передать данные своего объекта из одного класса в другойчерез @properties, и все работает хорошо с моими объектами NSString.Но я не могу получить доступ к моим данным NSDictionary (и / или NSMutableDictionary).На самом деле я попытался переключить свой NSDictionary на NSMutableDictionary, переключиться между сохранением и копированием и несколькими другими вариантами, но безрезультатно.

Вот разбивка.Мой NSDictionary объект, который я передаю, является projectMessagesList.Я надеюсь, что этого кода достаточно, чтобы быть кратким, но предоставьте достаточно информации:

DBSProject.h

@interface DBSProject : NSObject <NSCoding>
@property (nonatomic, retain) NSDictionary *projectMessagesList;
@end

DBSProject.m

@implementation DBSProject
@synthesize projectMessagesList=_projectMessagesList;
-(id)init {
    self = [super init];
    if (self) {
        [self setProjectCode:@"CODE"];
        NSMutableDictionary *projectMessagesList = [[NSMutableDictionary alloc] init];
        DBSMessage *message = [[DBSMessage alloc] init];

        [message setMessageDate:[NSDate date]];
        [message setMessageText:[NSString stringWithFormat:@"This is a message"]];
        [projectMessagesList setObject:message forKey:@"msg"];
        NSLog(@"%@", [projectMessagesList objectForKey:@"msg"]);
        }
    }
    return self;
}

NSLog в конце класса моего объекта правильно выводит на консоль «Это сообщение».

Теперь давайте перейдем к другому моему классу, ViewController:

DBSDetailViewController.h

#import "DBSProject.h"
#import "DBSMessage.h"

@interface DBSDetailViewController : UIViewController

@property (strong, nonatomic) DBSProject *myProject;
@property (strong, nonatomic) IBOutlet UILabel *clientCode;
@end

DBSDetailViewController.m

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    NSString *clientProjectString = [NSString stringWithFormat:@"%@ %@", self.myProject.clientCode, self.myProject.projectCode];

    self.title = self.myProject.projectCode;
    self.projectCode.text = clientProjectString;
    self.projectDescription.text = self.myProject.projectDescription;
    self.projectBudget.text = self.myProject.projectBudget;
    self.projectDueDate.text = self.myProject.projectDueDate;

    DBSMessage *tmpMessage = [[DBSMessage alloc] init];
    tmpMessage = [self.myProject.projectMessagesList objectForKey:@"msg"];

    NSLog(@"%@", self.myProject.projectCode);
    NSLog(@"%@", [tmpMessage messageText]);
}

Это правильно выводит мой код проекта, ноprojectMessagesList (мой NSDictionary) является (нулевым).

Итак, я могу получить доступ ко всему, кроме моего NSDictionary.Есть ли у кого-нибудь предложения относительно моей ошибки?Большое вам спасибо!

1 Ответ

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

Измени свой код, это очень простая ошибка

-(id)init {
    self = [super init];
    if (self) {
        [self setProjectCode:@"CODE"];
        //you are not assigning the object into ivar..you are creating a local object
        //NSMutableDictionary *projectMessagesList = [[NSMutableDictionary alloc] init];
        //into
        projectMessagesList = [[NSMutableDictionary alloc] init];
        DBSMessage *message = [[DBSMessage alloc] init];

        [message setMessageDate:[NSDate date]];
        [message setMessageText:[NSString stringWithFormat:@"This is a message"]];
        [projectMessagesList setObject:message forKey:@"msg"];
        NSLog(@"%@", [projectMessagesList objectForKey:@"msg"]);
        }
    }
    return self;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...