gpt4 book ai didi

ios - CoreData错误存储包含ä,ö,ü,ß的字符串

转载 作者:行者123 更新时间:2023-12-01 16:09:30 26 4
gpt4 key购买 nike

我在CoreData数据库中存储ä,ö,ü,ß字符时遇到问题,后来又以正确的格式读取它们并以UILabel的形式显示为文本。我将其存储为NSString例如“äüß”,但是由于从数据库中读取结果,我得到了奇怪的字符。任何想法如何读取NSString属性的正确值?

更新:

存储到CoreData数据库:

OCDatabaseFloor *floor = (OCDatabaseFloor*) [NSEntityDescription insertNewObjectForEntityForName:FLOOR_ENTITY_NAME inManagedObjectContext:managedObjectContext];
[floor setFloorName:floorName];

[self saveContext];

保存上下文功能是将更改保存到数据库。

从数据库层对象检索:
NSFetchRequest *fetch = [[NSFetchRequest alloc]init];
NSEntityDescription *entity = [NSEntityDescription entityForName:FLOOR_ENTITY_NAME inManagedObjectContext:managedObjectContext];
[fetch setEntity:entity];
NSPredicate *pred = [NSPredicate predicateWithFormat:@"floorID == %d",[floorID intValue]];
[fetch setPredicate:pred];
NSArray *floors = [managedObjectContext executeFetchRequest:fetch error:nil];
return [floors objectAtIndex:0];

和类OCDatabaseFloor:
@interface OCDatabaseFloor : NSManagedObject

@property (nonatomic, retain) NSNumber * floorID;
@property (nonatomic, retain) NSString * floorName;
@end

最佳答案

核心数据本身对这些字符没有任何问题。作为测试,我创建了一个演示项目,其中包含一个名为Entity的实体,该实体具有一个属性,即一个名为name的字符串。然后我运行了这段代码:

NSManagedObject *obj = [NSEntityDescription insertNewObjectForEntityForName:@"Entity" inManagedObjectContext:self.managedObjectContext];
[obj setValue:@"äüß" forKey:@"name"];

NSError *saveError = nil;
if (![self.managedObjectContext save:&saveError]) {
NSLog(@"Save error: %@", saveError);
} else {
[self.managedObjectContext reset];

NSFetchRequest *fr = [NSFetchRequest fetchRequestWithEntityName:@"Entity"];

NSError *fetchError = nil;
NSArray *results = [self.managedObjectContext executeFetchRequest:fr error:&fetchError];
if (results == nil) {
NSLog(@"Fetch error: %@", fetchError);
} else {
for (NSManagedObject *obj in results) {
NSLog(@"Name: %@", [obj valueForKey:@"name"]);
}
}
}

结果是:
2015-02-27 10:31:03.759 Junk[4808:25603285] Name: äüß

因此,您的字符串已损坏,但是必须在将其保存到Core Data之前或在将其读回之后进行。

好像您在某个地方混淆了字符编码。您提到“ö”被破坏为“Ô。在UTF-8中,“ö”表示为0xC3B6。在UTF-16中,“Ô为0xC3,“¶”为0xB6。因此,有时您会将UTF-8与UTF-16混合使用,但是由于Core Data的缘故,这种情况并没有发生。

关于ios - CoreData错误存储包含ä,ö,ü,ß的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28765146/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com