Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c @财产问题-目标C_Objective C_Cocoa_Boolean - Fatal编程技术网

Objective c @财产问题-目标C

Objective c @财产问题-目标C,objective-c,cocoa,boolean,Objective C,Cocoa,Boolean,我的财产有问题。首先,我定义它: @property (readwrite) BOOL isPerformingOperation; 然后将其合成: @synthesize isPerformingOperation; 然后我将属性设置为: self.isPerformingOperation=YES 为了确保我做对了事情,我记录: NSLog(@"class perform is %i",self.isPerformingOperation); 。。。它按预期返回1 但是我需要从另一个类

我的财产有问题。首先,我定义它:

@property (readwrite) BOOL isPerformingOperation;
然后将其合成:

@synthesize isPerformingOperation;
然后我将属性设置为:

self.isPerformingOperation=YES

为了确保我做对了事情,我记录:

NSLog(@"class perform is %i",self.isPerformingOperation);
。。。它按预期返回1

但是我需要从另一个类读取属性-
DAUpdatingView
,因此我从添加属性的类导入头文件,并尝试两种获取值的方法,这两种方法都始终返回0,即使在原始类中将其设置为1

NSLog(@"My Boolean: %d, or %@", [USBBackupAppDelegate sharedInstance].isPerformingOperation, [USBBackupAppDelegate sharedInstance].isPerformingOperation ? @"Yes" : @"No");
这是控制台输出:

2010-10-12 19:32:11.381 USBBackup[3329:a0f] class perform is 1
2010-10-12 19:32:15.330 USBBackup[3329:a0f] My Boolean: 0, or No
正如您所看到的,属性来自的主类已按预期更改了值,但另一个类没有读取该值。我错过了什么

编辑:

是,我正在使用原始类的共享实例:

static USBBackupAppDelegate *sharedInstance = nil;

+ (USBBackupAppDelegate *)sharedInstance
{
    return sharedInstance ? sharedInstance : [[self alloc] init];
}

属性是每个实例的,不在对象之间共享。阅读此问题的答案以查看实现所需功能的代码


好吧,
USBBackupAppDelegate*app=[[USBBackupAppDelegate alloc]init]创建一个新的对象实例。在新实例中,属性尚未设置为“是”

+ (USBBackupAppDelegate *)sharedInstance
{
    return sharedInstance ? sharedInstance : [[self alloc] init];
}
那不行;每次调用
sharedInstance
,您都在创建一个新实例(假设
sharedInstance
为nil)


当然,除非您在
init
中设置了
sharedInstance
,这将是一个非常奇怪的模式。

true,但是共享原始实例的sharedInstance仍然返回相同的结果:/我已经做到了-我使用+sharedInstance来实现这一点。结果仍然相同。sharedInstance与您分配的对象不同。在sharedInstance消息中,sharedInstance变量是什么?它是如何声明的?它是如何变为非零的?如果在标头中声明为实例变量,则实例之间不会共享该变量。您需要在sharedInstance消息中创建一个本地静态。如果您分配另一个对象,则该对象不是共享的。类引用该类型,该类的每个运行时实例称为对象。问题的最后一句应该是“设置属性的主对象具有更改的值,但另一个对象具有其默认值”——每个对象都有自己的所有属性副本,因此,一旦您理解了类和对象之间的区别,您就可以看到问题所在。我有一个NSView的类&一个子类-USBBackupDelegate&dauptatingview-我想从dauptatingview子类中的USBBackupDelegate类中获取属性。我忘记了它的init实现,因此它不起作用。现在可以了,谢谢!是的,它一直是这样的,这意味着消息总是返回一个新的对象,而这个对象不是共享的。苹果官方认可的编写单例的方法是在
-allocWithZone:
中设置它。为什么?嗯,我想你比我更清楚。:-)