执行获取请求后,获取对象的属性为零

时间:2013-11-05 15:30:06

标签: ios objective-c core-data

我从某个实体获取托管对象数组。在executeFetchRequest返回I NSLog元素及其属性后,一切都很好。在我返回新生成的数组并尝试在后台线程或其他方法中使用它之后,数组中托管对象的属性变为nil。这是代码:

Utakmice -NSManagedObject子类

    - (NSArray*)ucitajPodatke:(NSDate*)zaDatum drzavaId:(int)_drzavaId
    {

            NSManagedObjectContext *con = [[NSManagedObjectContext alloc] init];
            [con setPersistentStoreCoordinator:persistentStoreCoordinator];
            [con setStalenessInterval:0];
            [con setUndoManager:nil];
            // create request and predicate
            // set return result type to NSManagedObjectResultType
            ...
            ...

        return fetchedObjects; -> This works cause I can log everything and all values R OK...
    }

    -(void)SomeMethod
        NSArray *array  = [self ucitajPodatke:danas drzavaId:self.drzavaId];

        Utakmice *tekma = [array objectAtIndex:0];
        NSLog(@"%i", [tekma.uniqueId intValue]); -> everything is fine


        dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, 0.35 * NSEC_PER_SEC);
            dispatch_after(popTime, dispatch_get_main_queue(), ^(void){

                if (array != nil && [array count]>0)
                {
                    Utakmice *tekma1 = [array objectAtIndex:0];
                    DLog(@"%@", tekma1.uniqueId);
                    DLog(@"%i", [tekma1.uniqueId intValue]); -> all properties have nil value
    ...
    ...

有什么建议吗?我真的不知道从哪里开始......

还有一件事。在ucitajPodatke方法中,当我将返回结果类型设置为NSDictionaryResultType - >一切都很好......(我需要托管对象因为我需要关系)... Thx in advanced

2 个答案:

答案 0 :(得分:0)

你需要做的第一件事就是保持对数据的强引用, 之后你就可以派遣了。

打电话

会很好
  [self performSelector:@selector(someMethod) withObject:nil afterDelay:0.35];

而不是调度。

此问题也可能与“数据错误”有关。 访问对象字段时将获取数据。 如果您想完全获取没有错误的对象,可以使用

NSFetchRequest *request = ...;// your fetch request here
[request setReturnsObjectsAsFaults:YES];
// Fetch here

答案 1 :(得分:-1)

好的我终于谷歌了: Core Data - sharing NSManagedObjects among multiple threads

看来U不能在线程之间传递托管对象,而是U应该传递托管对象id的