cocoa - 将类型从 id 更改为子类 nsmanagementobject

标签 cocoa

我需要这个操作 bsc 方法接收 id,并且我喜欢稍后使用点语法来设置对象。 目前我就是用这种方式做的。但也许有人知道更优雅的方式?

-(NSError *) updateObject:(id)object operation:(NSInteger)operation;
{
CurrentCompany *obj1 = nil;
 ...
CompanyStuff *obj2 = nil;


if ([[[(CurrentCompany *)object entity] name] isEqualToString:@"CurrentCompany"]) obj1 = (CurrentCompany *)object;
if ([[[(CompanyStuff *)object entity] name] isEqualToString:@"CompanyStuff"]) obj2 = (CompanyStuff *)object;

NSLog(@"UpdatedObject:%@",obj1);

最佳答案

如果这些类符合通用协议(protocol)或从声明属性的通用父类(super class)继承,则可以将变量静态键入为该协议(protocol)或父类(super class)。如果这两种情况都不是,那么它们似乎不应该被互换对待。

此外,这并不是真正相关的,但是从 id 到特定类的显式转换是没有意义的。您只需分配即可。

关于cocoa - 将类型从 id 更改为子类 nsmanagementobject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5942509/

相关文章:

objective-c - 你如何使用 NSDecimalNumber 获得除法的整数和模数(mod)

objective-c - 错误 "Passing address of non-local object to __autoreleasing parameter for write-back"

cocoa - ZipZAP 解压缩 ZIP 文件

objective-c - 我应该把 [pool drain] 放在 @finally 子句中吗?

Cocoa:将纹理图集值传递给 NSView

iphone - 关于 iPhone 上的 ivars 和 @property 的问题

cocoa - NSView 图层阴影绘制在 subview 上,而不是 View 本身

macos - 在启动 Mac 应用程序时选择 Windows

objective-c - 菜单栏应用程序行为与全屏应用程序空间 (mac os 10.7/lion)

macos - 从 macOS 10.11 开始,当 LSSharedFileListInsertItemURL 已弃用时,如何添加 LoginItems?