Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.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
iOS-在同一项目中使用Swift和Objective c?_Ios_Objective C_Swift_Core Data_Nsmanagedobject - Fatal编程技术网

iOS-在同一项目中使用Swift和Objective c?

iOS-在同一项目中使用Swift和Objective c?,ios,objective-c,swift,core-data,nsmanagedobject,Ios,Objective C,Swift,Core Data,Nsmanagedobject,我正在处理一个由iOS和swift共同创建的项目。此项目是一个基于套接字的应用程序。在这个应用程序中,数据存储在数据库中并从中提取。当我想从表中获取数据时,我将获取数据作为模型放到NSManagedObject类中,当我想使用它们时,从它们的NSManagedObject模型中获取它们。而且我应该说模型类是基于c语言的!!现在,当我想在swift类中使用这个模型数据并将它们转换到一个特定的类时,在运行时给出了一个错误。请给我一个解决办法。这是我的密码: -(NSMutableArray *)lo

我正在处理一个由
iOS
swift
共同创建的项目。此项目是一个基于套接字的应用程序。在这个应用程序中,数据存储在数据库中并从中提取。当我想从表中获取数据时,我将获取数据作为模型放到
NSManagedObject
类中,当我想使用它们时,从它们的
NSManagedObject
模型中获取它们。而且我应该说模型类是基于c语言的!!现在,当我想在swift类中使用这个模型数据并将它们转换到一个特定的类时,在运行时给出了一个错误。请给我一个解决办法。这是我的密码:

-(NSMutableArray *)loadBills : (int) estateId : (int) personId {
    NSManagedObjectContext *context = [self managedObjectContext];
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Bill" inManagedObjectContext:context];
    [fetchRequest setEntity:entity];
    NSPredicate *pred = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"(personId = %d) AND (estateId = %d)",personId,estateId]];
    [fetchRequest setPredicate:pred];
    NSArray *fetchedObjects=[self.managedObjectContext executeFetchRequest:fetchRequest error:nil];
    NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"billId" ascending:NO];
    NSArray *sortedArray = [fetchedObjects sortedArrayUsingDescriptors:@[sort]];
    NSMutableArray *array=[[NSMutableArray alloc]init];
    for (NSManagedObject *info in sortedArray) {
        Bill *bill=(Bill *)info;
        [array addObject:bill];
    }//for
    return array;
 }//loadBills
铸造的Swift代码为:

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as! BillCell
    let sa = getBillData().objectAtIndex(indexPath.row) as! Bill
    print(sa.expDate)
    return cell
}
getBillData()
函数是:

private func getBillData() -> NSMutableArray {
    let dataLayer = DataLayer()
    let person = dataLayer.getCurrentPerson()
    let billArray = dataLayer.loadBills(person.estateId.intValue, person.personId.intValue)
    return billArray
}
错误是:

无法将“NSManagedObject\u Bill”强制转换为Bill


首先,在
cellForItemAtIndexPath
函数中从数据库加载数据是不安全的,也是不好的做法,因为每次滚动集合视图时,该函数都会调用,而不是将账单对象加载到数组中,并设为数据源,并从该数据源填充单元格。这可能是获得nil对象的另一个原因

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as! BillCell
    let sa = getBillData().objectAtIndex(indexPath.row)
    print(sa.valueForKey("expDate")!.description)
    return cell
}

您是否尝试过调试并查看“sa”变量的结果?是的。。。为了什么?@BinMan1,调试并查看变量“sa”得到了什么,是不是为零?亲爱的downvoter,请说明是否有任何理由进行downvoting,只是downvoting对任何人都没有帮助。如果有原因的话,我可以改进答案,这对遇到这种情况的每个人都有好处。