gpt4 book ai didi

ios - 核心数据,第一次运行时不会在 uitableview 中显示数据,第二次运行正常

转载 作者:行者123 更新时间:2023-11-29 03:19:33 25 4
gpt4 key购买 nike

我想用 plist 文件中的数据填充 UITableView 到核心数据中

这让我很容易在以后的版本中更新 uitableview,然后我只需要在 plist life 中进行更改,核心数据会处理其余部分。请告诉我是否有更好的方法...

无论如何我在这里做的这个不能正常工作,在第一次运行时它填充了核心数据但是 UITableView 是空的,然后如果你完全关闭应用程序,也可以从多任务栏启动它再次向上它现在显示带有数据的 uitableview

在我的应用程序 delegate.h 中我有:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

if ( ![userDefaults valueForKey:@"version"] )
{
[self value1];
[self value2];
[self value3];
[self value4];
[self value5];
[self value6];

NSLog(@"running code");
[[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait];

// Adding version number to NSUserDefaults for first version:
[userDefaults setFloat:[[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"] floatValue] forKey:@"version"];
}

if ([[NSUserDefaults standardUserDefaults] floatForKey:@"version"] == [[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"] floatValue] )
{
/// Same Version so dont run the function
}
else
{
[Hovedmenu MR_truncateAll];
[BarneDaab MR_truncateAll];
[Graviditeten MR_truncateAll];
[MineSygedomme MR_truncateAll];
[Fortalt MR_truncateAll];
[Familien MR_truncateAll];

[self value2];
[self value3];
[self value4];
[self value5];
[self value6];
[self value1];

[[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait];
NSLog(@"running code agian");

// Update version number to NSUserDefaults for other versions:
[userDefaults setFloat:[[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"] floatValue] forKey:@"version"];
}
}

和 value1 2 3 4 5 6 几乎完全相同,但来自不同的 plist,这里是例子

-(void)value1{
NSManagedObjectModel *mom = [self managedObjectModel];
NSDictionary *attrs = [[[mom entitiesByName] objectForKey:@"Hovedmenu"] attributesByName];
NSArray *keyedValues = [[NSArray alloc] initWithContentsOfFile:
[[NSBundle mainBundle] pathForResource:@"hovedMenu" ofType:@"plist"]
];

for( NSDictionary *keyedValueDict in keyedValues ) {
NSManagedObject *mObj = [NSEntityDescription insertNewObjectForEntityForName:@"Hovedmenu" inManagedObjectContext:[self managedObjectContext]];
for (NSString *attribute in attrs) {
id value = [keyedValueDict objectForKey:attribute];
if (value == nil) {
// Don't attempt to set nil, or you'll overwite values in self that aren't present in keyedValues
continue;
}
NSAttributeType attributeType = [[attrs objectForKey:attribute] attributeType];
if ((attributeType == NSStringAttributeType) && ([value isKindOfClass:[NSNumber class]])) {
value = [value stringValue];
} else if (((attributeType == NSInteger16AttributeType) || (attributeType == NSInteger32AttributeType) || (attributeType == NSInteger64AttributeType) || (attributeType == NSBooleanAttributeType)) && ([value isKindOfClass:[NSString class]])) {
value = [NSNumber numberWithInteger:[value integerValue]];
} else if ((attributeType == NSFloatAttributeType) && ([value isKindOfClass:[NSString class]])) {
value = [NSNumber numberWithDouble:[value doubleValue]];
}
[mObj setValue:value forKey:attribute];
NSLog(@"Value %@ for Key %@", value, attribute);
}

}
NSError *error;
[[self managedObjectContext] save:&error];
}

在我的 viewcontroller.h 中

-(void)viewWillAppear:(BOOL)animated{
[self.mainTableView reloadData];
[super viewWillAppear:animated];
NSError *error = nil;
if (![[self fetchedResultsController] performFetch:&error]) {
// Update to handle the error appropriately.
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
exit(-1); // Fail
}
}
- (NSFetchedResultsController *)fetchedResultsController {
if (_fetchedResultsController != nil) {
return _fetchedResultsController;
}

_fetchedResultsController = [Hovedmenu fetchAllGroupedBy:nil withPredicate:nil sortedBy:@"numberRow" ascending:YES delegate:self];

return _fetchedResultsController;

我也在用 MagicalRecord

最佳答案

最有可能的是,从我在这里的代码中可以看出,您用来获取 value1、value2 等值的上下文与 MagicalRecord 为您创建的上下文不同。如果您将该上下文更改为使用 MR_defaultContext,则可能会正确更新所有内容。

关于ios - 核心数据,第一次运行时不会在 uitableview 中显示数据,第二次运行正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21271343/

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