Iphone 操作时属性未更改

Iphone 操作时属性未更改,iphone,objective-c,ios,nsoperation,nsoperationqueue,Iphone,Objective C,Ios,Nsoperation,Nsoperationqueue,我有一个NSOperation在后台线程上运行,我想在主线程上收到内存警告时更改它的一个属性,一个名为runSpeed的浮点。不过,下次后台线程达到运行速度时,它的值似乎与以前相同 当我在主线程上更改它时,如何确保它在NSOperation线程中更改 编辑: 最初没有发布代码,因为我认为我的想法是错误的。这是我的密码: AppDelegate -(void)applicationDidReceiveMemoryWarning:(UIApplication *)application {

我有一个
NSOperation
在后台线程上运行,我想在主线程上收到内存警告时更改它的一个属性,一个名为
runSpeed
的浮点。不过,下次后台线程达到运行速度时,它的值似乎与以前相同

当我在主线程上更改它时,如何确保它在
NSOperation
线程中更改

编辑:

最初没有发布代码,因为我认为我的想法是错误的。这是我的密码:

AppDelegate

-(void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
    NSLog(@"memory warning");
    if (dataUpdateIsActive) {
        NSLog(@"data update is active");
        dataUpdate.runSpeed = 10;
        [NSTimer scheduledTimerWithTimeInterval:10
                                         target:self
                                       selector:@selector(resetRunSpeed)
                                       userInfo:nil
                                        repeats:NO];
    }
}
然后在一种方法中:

    NSOperationQueue *operationQueue = [[NSOperationQueue alloc] init];

    dataUpdate = [[JDataUpdate alloc] init];

    [dataUpdate setOldPSC:[oldContext persistentStoreCoordinator]];
    [dataUpdate setCurrentPSC:[newContext persistentStoreCoordinator]];
    [dataUpdate setRunSpeed:0.5];
    [dataUpdate setEntriesToCreate:250];
    [dataUpdate setSaveFrequency:10];

    dataUpdateIsActive = YES;
    [operationQueue addOperation:dataUpdate];
这两个
nslog
都会被触发

NSOperation

- (void)main
{
    for (NSInteger index = 0; index < [self entriesToCreate]; ++index) {
        [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:[self runSpeed]]];
    }
}
-(void)主
{
对于(NSInteger索引=0;索引<[自定心创建];++索引){
[[NSRunLoop currentRunLoop]runUntelDate:[NSDate dateWithTimeIntervalSinceNow:[self runSpeed]];
}
}

向我们展示一些代码:)通常,这应该“正常工作”。@deanWombourne使用代码更新。在for循环日志运行速度中,以及当您在ApplicationIDReceiveMemoryWarning中更改它时。@DavidH好的,更改后的行,我输入了一个NSLog,结果是“0”。在NSLog操作中调用后,每个NSLog都返回0.5。这没有意义。您设置了操作的值,然后从设置它的位置读取它,它是0?原始值应该是一些大的数字,比如2。那你就应该看到一连串的“2”了。将控制器中的值设置为1,记录您所做的操作,然后从操作中读回该值,并验证其1并记录该值。下次运行runloop操作时,它应该是1-您应该看到这一点。