gpt4 book ai didi

ios - 强制使用已使用 NSUserDefaults 创建的实体

转载 作者:行者123 更新时间:2023-11-28 21:40:59 25 4
gpt4 key购买 nike

我正在尝试选择或按下一个或两个按钮,应用程序将创建一个与该社区相关的实体,从而根据选择显示以下屏幕。为了避免每次都创建实体决定使用 NSUserDefaults 和实现是这样的:

- (void)carregarEntidadeLojaComId:(NSString *)identificadorLoja keyNSUserDefault:(NSString *)key {
if (![[NSUserDefaults standardUserDefaults] objectForKey:key]) {
NSManagedObjectContext *contexto = [self managedObjectContext];

NSArray *arrayLojas = [Utils carregarArrayPlist:identificadorLoja];
NSArray *atributosComuns = @[@"titulo", @"subtitulo", @"telefone", @"endereco"];
for (NSDictionary *dicionario in arrayLojas) {
loja = [NSEntityDescription insertNewObjectForEntityForName:@"Loja" inManagedObjectContext:contexto];
categoria = [NSEntityDescription insertNewObjectForEntityForName:@"Categoria" inManagedObjectContext:contexto];
quadra = [NSEntityDescription insertNewObjectForEntityForName:@"Quadra" inManagedObjectContext:contexto];

//Loop para atributos comuns
for (NSString *atributo in atributosComuns) {
[loja setValue:[dicionario objectForKey:atributo] forKey:atributo];
}

[categoria setValue:[dicionario objectForKey:@"categoria"] forKey:@"nome"];
[loja setValue:categoria forKey:@"categoria"];

[quadra setValue:[dicionario objectForKey:@"quadra"] forKey:@"nome"];
[loja setValue:quadra forKey:@"quadra"];
}
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:key];
[[NSUserDefaults standardUserDefaults] synchronize];
}
}

第一次转,应用识别没有key,进入if语句,创建实体。从您第二次使用该应用程序开始,它就不会输入 if 语句,但他不能使用已创建的实体,因此依赖于它们的屏幕无法实现。我的问题是如何强制应用程序使用用户第一次单击应用程序时创建的实体。

最佳答案

真的有NSUserDefaults吗需要吗?

为什么不直接从 CoreData 本身查询实体,就像这样:

- (void)carregarEntidadeLojaComId:(NSString *)identificadorLoja keyNSUserDefault:(NSString *)key {
NSManagedObjectContext *contexto = [self managedObjectContext];

NSFetchRequest *request = [NSFetchRequest new];
request.entity = [NSEntityDescription entityForName:@"Loja"
inManagedObjectContext:contexto];

request.predicate = [NSPredicate predicateWithFormat:@"identificador = %@", identificadorLoja];

NSError *error = nil;
NSArray *fetchedObjects = [contexto executeFetchRequest:request error:&error];

NSArray *lojas = nil;
if ((error == nil) && [fetchedObjects count] > 0)
lojas = fetchedObjects;

if (!lojas) {
NSArray *arrayLojas = [Utils carregarArrayPlist:identificadorLoja];
NSArray *atributosComuns = @[@"titulo", @"subtitulo", @"telefone", @"endereco"];
for (NSDictionary *dicionario in arrayLojas) {
loja = [NSEntityDescription insertNewObjectForEntityForName:@"Loja" inManagedObjectContext:contexto];

//Loop para atributos comuns
for (NSString *atributo in atributosComuns) {
[loja setValue:[dicionario objectForKey:atributo] forKey:atributo];
}

[loja setValue:[self categoriaWithNome:[dicionario objectForKey:@"categoria"]
inContexto:contexto]
forKey:@"categoria"];

[loja setValue:[self quadraWithNome:[dicionario objectForKey:@"quadra"]
inContexto:contexto]
forKey:@"quadra"];


[loja setValue:identificadorLoja
forKey:@"identificador"];

}
} else {
// do what you want with loja's, previously stored in CoreData

for (NSManagedObject *entity in lojas)
...
}

}

- (NSManagedObject *) categoriaWithNome:(NSObject *)nome inContexto:(NSManagedObjectContext *)contexto {
NSManagedObject *categoria = [NSEntityDescription insertNewObjectForEntityForName:@"Categoria" inManagedObjectContext:contexto];
[categoria setValue:nome forKey:@"nome"];
return categoria;
}

- (NSManagedObject *) quadraWithNome:(NSObject *)nome inContexto:(NSManagedObjectContext *)contexto {
NSManagedObject *quadra = [NSEntityDescription insertNewObjectForEntityForName:@"Quadra" inManagedObjectContext:contexto];
[quadra setValue:nome forKey:@"nome"];
return quadra;
}

更新。

已添加 predicate请求并删除limit ,因为您似乎有多个 loja每个 identificadorLoja .

关于ios - 强制使用已使用 NSUserDefaults 创建的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32085540/

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