Ios 是否可以在不同的类中使用间接调用更改对象的值,而不是在实例化对象的类中使用间接调用?
我正在创建一个自定义表视图单元格生成器,并希望传入对在基类中创建的对象的引用,该基类将在单独的VC中进行变异,而原始对象类将反映这些更改:Ios 是否可以在不同的类中使用间接调用更改对象的值,而不是在实例化对象的类中使用间接调用?,ios,objective-c,nsobject,Ios,Objective C,Nsobject,我正在创建一个自定义表视图单元格生成器,并希望传入对在基类中创建的对象的引用,该基类将在单独的VC中进行变异,而原始对象类将反映这些更改: //MutableTableViewObjects.h @interface MutableTableViewObjects : NSObject @property (retain, atomic) NSDate *startDate; //MutableTableViewObjects.m - (id) init { self = [supe
//MutableTableViewObjects.h
@interface MutableTableViewObjects : NSObject
@property (retain, atomic) NSDate *startDate;
//MutableTableViewObjects.m
- (id) init {
self = [super init];
if (self) {
self.startDate = [[NSDate alloc] init];
}
return self;
}
然后我需要在单独的视图控制器中调用以更改startDate的值
self.objectClass = [[MutableTableViewObjects alloc] init];
DateOptionCellInput *startDateCell = [[DateOptionCellInput alloc] initDateInputForObject:self.objectClass.startDate withDefault:[NSDate date] withTitle:@"start date" inSection:@"Dates"];
在这里,我希望startDateCell修改startDate的值,并让self.objectClass.startDate反映其他类/线程中对其值所做的更改
这是可能的还是我应该认真重新考虑架构
当前,该值在VC中更改,但在基本对象类中从未更新。是否有一些属性参数可以传入以允许此操作
编辑:以下是日期单元格的显示方式
@interface BaseOptionCellInput : NSObject
@property (atomic) NSObject* observedObject;
- (id) initType:(NSString*) optionType withTitle:(NSString*) titleString inSection:(NSString*) sectionHeaderString {
self = [super init];
if (self) {
self.title = titleString;
self.sectionHeader = sectionHeaderString;
self.identifier = optionType;
}
return self;
}
- (void) setManagedObject:(NSObject*) managedObject withDefaultValue:(NSObject*) defaultvalue {
self.observedObject = managedObject;
self.defaultValue = defaultvalue;
}
- (void) updateContextWithValue:(NSObject*) newValue {
if ([self.observedObject class] == [newValue class]) {
self.observedObject = newValue;
}
}
DateCell是BaseCell的一个子类,从VC中触发的委托方法调用updateContextWithValue
我知道,如果我使用字典来来回传递对象的值,我可以做到这一点,但我希望只传递一个指向该对象的指针是可能的?我想象在initDateInputForObject函数中,您只是使用传入对象的值,并将其分配给startDateCell的成员变量 您要做的可能是保留一个指向MutableTableViewObjects对象的指针,以便直接修改其中的日期值 如果您可以为可变TableViewObjects添加代码,我可以更清晰地阐述,而不是在黑暗中射箭: 但希望你明白我的意思。要点是,在代码中,没有任何地方会更新orig MutableTableViewObjects对象值。。仅仅因为您使用它来初始化另一个对象,并不意味着当您更改第二个对象时,它将保持更新 编辑: 假设我有一个有NSDate的A级* A.h 早上好
- (id) init {
self = [super init];
if (self) {
self.startDate = [[NSDate alloc] init];
}
return self;
}
现在有一个类B,它包含一个a的对象
B.h
@接口B:UITableViewController
@属性强,非原子A*A对象;
@结束
B.m
- (void) some function {
self.aObject = [[A alloc] init];
}
现在,如果您更改self.aObject.startDate,您应该能够直接更改数据的值
如果它没有按预期工作,请确切地告诉我它是什么以及发生在哪里
thx这就是我想要完成的。我发布了其他的课程,也许可以更好地解释它。我也可以将整个项目发布在github上,如果这样有帮助的话,initDateInputForObject在哪里?我在BaseCell或DateCell中没有看到任何设置日期值的代码。。我不太明白。。代码在补丁中。。Sorry我把整个项目推到git hub。我使用核心数据工作,我知道我已经可以这样做了,但我仍然希望将对象作为指针传递,以便在不知道对象名称或类型的情况下为它们分配新值。核心数据是一种存储机制,是跨类以及在客户端和服务器之间共享数据的一种方式,但您不需要做您正试图做的事情。你的问题我不清楚。我建议您只使用问题代码更新问题。在函数调用之后您希望更改的对象。在不知道相关课程的情况下看这样一个大型项目对我来说是浪费时间。我正在用更多的细节更新答案
- (void) some function {
self.aObject = [[A alloc] init];
}