2014-06-22 11 views
9

Int32.max ve UInt32.max'dan büyük tamsayı değerleri kaydetmek istediğim bir varlık üzerinde bir CoreData özniteliğim var. Değer bir endeks olarak kullanıldığından, arama performansı önemlidir. Bu yüzden CoreData'da Integer 64 veri türünü kullanmayı tercih ettim.Çekirdek Veri Tamsayı 64 Swift Int64 ile nasıl kullanılır?

Artık Int64'ün varlık örneğimde nasıl saklanacağını düşünüyorum. Ayrıca denediğim aşağıdaki farklı yaklaşımlara da bakınız.

Kullanım NSNumber: NSInteger

import Foundation 
import CoreData 

class Node : NSManagedObject { 
    @NSManaged var id : NSNumber 
} 

node.id = Int64(1) 
> 'Int64' is not convertible to 'NSNumber' 

Kullanım: Int64

import Foundation 
import CoreData 

class Node : NSManagedObject { 
    @NSManaged var id : NSInteger 
} 

node.id = Int64(1) 
> 'Int64' is not convertible to 'NSInteger' 

Kullanım:

import Foundation 
import CoreData 

class Node : NSManagedObject { 
    @NSManaged var id : Int64 
} 

node.id = Int64(1) 
> EXC_BAD_ACCESS (code=1, address=...) 

nitelik tanımlanmalıdır nasıl/64 bit tamsayı kullanmak için atanmış?

cevap

21

yapabilirsiniz yönetilen nesne alt sınıfta NSNumber olarak "tamsayı 64" özelliğini tanımlayın:

@NSManaged var id : NSNumber 

bir değeri ayarlanması:

let value:Int64 = node.id.longLongValue 

: değeri alınıyor

let value:Int64 = 20000000000000000 
node.id = NSNumber(longLong: value) 

long long'un hem 32 bit hem de 64 bit'te 64 bit bir tam sayı olduğunu unutmayın. bit mimarisi. Çekirdek Veri ilkel veri türleri için sayıl erişimci yöntemleri destekler çünkü mülkiyet tanımlanması


olarak
@NSManaged var id : Int64 

// ... 
node.id = Int64(...) 

gerektiği da çalışır. Bir değer atarken EXC_BAD_ACCESS istisnası, Swift derleyici veya çalışma zamanında bir hata gibi bana görünüyor. Boole özelliği için benzer bir sorun burada

bildirilmektedir ancak skaler Bool mülkiyet aynı duruma neden olur .

+0

Önerilen çözümünüzü kullanarak "NSNumber (longLong: value)" çalıştı. Size katılıyorum ki, ikincisi Swift'deki bir böcek. – bouke

+1

32 bit mimarilerde Int64'e neden olan tuzakların (18113807) Xcode 6.1 beta sürümünde düzeltildi. – bouke

İlgili konular