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-您应该看到这一点。