2016-05-19 60 views
-1

我正在創建一個由iOSswift創建的項目。該項目是一個基於套接字的應用程序在這個應用程序中,數據存儲在數據庫中並從那裏獲取。當我想從表中獲取數據時,我把數據提取到NSManagedObject類作爲模型,當我想使用它們時,從它們的NSManagedObject模型中獲取它們。我也應該說模型類是客觀的C基礎!現在,當我想在swift類中使用這個模型數據並將它們轉換爲特定類時,會在運行時給出一個錯誤。請給我一個解決方案。這是我的代碼:iOS - 在同一個項目中使用Swift和Objective c?

-(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 
鑄造

雨燕代碼:

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()功能是:

和錯誤是:

可能不會將'NSManagedObject_Bill_'轉換爲Bill。

回答

-1

首先它是不是安全,而不是一個很好的做法,在cellForItemAtIndexPath功能從數據庫中加載數據,因爲這個函數會打電話給你每次滾動集合視圖的時間,而不是加載比爾對象到一個數組的和設置爲數據源並填充該數據源的單元格。這可能是你得到零對象的另一個原因。

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 
} 
+0

我試試它,但結果是零... !!! :( – BinMan1

+0

您是否嘗試過調試並查看「sa」變量是什麼? –

+0

是啊...什麼? – BinMan1

相關問題