Özgün verilere kalıcı olması gereken NSObject
numaralı özel bir nesnem var (Data
).Çekirdek Verileri doğru veriyi dönmüyor bazen
@interface Transaction (CoreDataProperties)
@property (nonatomic) BOOL m_isUploaded;
@property (nullable, nonatomic, retain) id m_transactionData; // this is the Data class, stored under Transformable
@property (nonatomic) int64_t m_submitDateTimeEpochMilliseconds;
@property (nullable, nonatomic, retain) NSString *m_uuid;
@end
Bir bağlam oluşturulan ve ana iş parçacığı üzerinde bağlamda ilgili her şeyi yaptılar: Dolayısıyla ben, böyle bir şey Data
içerdiğini bir NSManagedObject
(Transaction
) oluşturuldu.
Data
ürününü NSCoding
ve NSCopying
protokollerine uygun yaptım. Ayrıca Data
'da kullanılan bazı özel sınıflar da NSCoding
ile uyumlu hale getirilmiştir. Ben tamamen sadece insert yoksa
@interface Data : NSObject <NSCoding, NSCopying>
@property (strong, nonatomic, nullable) HeldItem *m_heldItem;
@property (strong, nonatomic, nullable) NSDecimalNumber *m_discountAmount;
@property (strong, nonatomic, nonnull) NSMutableArray<Record *> *m_records;
@property (strong, nonatomic, nonnull) NSString *m_transactionId;
@property (nonatomic) CLLocationCoordinate2D m_location;
@property (strong, nonatomic, nullable) NSString *m_status;
- (void)encodeWithCoder:(nonnull NSCoder *)aCoder;
- (nonnull id)initWithCoder:(nonnull NSCoder *)aDecoder;
...lots of variables/methods here...
@end
, hiçbir sorunları (Ben encodeWithCoder:
sırasında değişkenlere bakarak teyit) vardır:
Bu Data.h
kısa özüdür. Ya da sadece okuyorsam, hiçbir sorun yok. Ben yeni Transaction
(ve Data
) kaydı ve aramayı eklemek olsaydı
Ancak/varolan rekor okuyup (Data
) değiştirmek varolan rekor kurtardı almaz ve yeni kayıt çoğunlukla olduğunu boş (yeniymiş gibi). Bu sorun, rastgele adresinde gerçekleşir. Bu durumla karşılaşmadan önce 8 kez koşabilirim.
Nerede yanlış gittiğim hakkında bir fikrim var mı? Uzun zamandır takıldım.
// Some helper function in some manager
- (Transaction * _Nonnull)getTransactionFromCoreDataWithId:(NSString * _Nonnull)dataId
{
NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:[Transaction entityName]];
request.returnsObjectsAsFaults = NO;
NSError *error;
NSArray<Transaction *> *fetchedObjects = [self.m_coreDataStore.managedObjectContext executeFetchRequest:request error:&error];
NSAssert(fetchedObjects != nil, @"Failed to execute %@: %@", request, error);
if(fetchedObjects == nil || fetchedObjects.count == 0)
{
// error
return nil;
}
for(Transaction *t in fetchedObjects)
{
Data *td = t.m_kmsTransactionData;
if([td.m_salesRecordId isEqualToString:salesRecordId])
{
return t;
}
}
return nil;
}
yine ilk program mantığı kontrol ?sınıfınız neden NSManagedObject'ün bir alt sınıfı değil? "İşlem" işlemlerini "İşlem" haline getiriyor musunuz? – Wain
"Verilerim" zaten "NSObject" olarak oluşturuldu ve "Veri" yi saklamak ve "Veri" ye yaptığım şeyi takip etmek için kaydetmem gerektiğinden, bunları depolamak için "İşlem" oluşturdum . Her şeyin sonunda biriktiriyorum. Kodu düzeltmeme izin ver. – CyberMew
Başlatılan Argümanlar Altında CD hata ayıklama "-com.apple.CoreData.SQLDebug 1" etkinleştirin. CD'nin otomatik olarak nesnenizi paketlemek/açmak için NSKeyedArchiver'ı kullanıp kullanmadığını merak ediyorum. – Andy