小编Eri*_*ric的帖子

iPhone核心数据"自动轻量级迁移"

我正在尝试更新实现核心数据存储的应用程序.我正在为其中一个实体添加一个属性.

我将以下代码添加到我的委托类:

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {

    if (persistentStoreCoordinator != nil) {
        return persistentStoreCoordinator;
    }

    NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"Shoppee.sqlite"]];

    NSError *error = nil;
    persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];

    NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
                             [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
                             [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];

    if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]) {
        NSLog(@"Error: %@",error);
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }    

    return persistentStoreCoordinator;
}
Run Code Online (Sandbox Code Playgroud)

这来自以下网址: Doc

执行代码时出现以下错误:

2009-12-01 20:04:22.877

Shoppee [25633:207]错误:错误

Domain = NSCocoaErrorDomain Code = 134130 …

iphone core-data core-data-migration ios

64
推荐指数
5
解决办法
2万
查看次数

使用iOS Dropbox SDK进行核心数据的分块上传

我有一个iOS应用程序,它使用Core Data进行持久数据存储.我将Dropbox集成为用户执行持久存储文件(appname.sqlite)备份的一种方式.

UIButton调用一个方法来查看Dropbox上是否已存在文件:

            if([[DBSession sharedSession]isLinked])
            {
               NSString *folderName = [[self.dateFormatter stringFromDate:[NSDate date]] stringByReplacingOccurrencesOfString:@"/" withString:@"-"];
               NSString *destinationPath = [NSString stringWithFormat:@"/GradeBook Pro/Backup/%@/",folderName];
               self.metadataIndex = METADATA_REQUEST_BACKUP;
               [self.restClient loadMetadata:destinationPath];
            }
Run Code Online (Sandbox Code Playgroud)

loadedMetadata委托方法使用现有文件的rev号(如果存在)启动上载.

-(void) restClient:(DBRestClient *)client loadedMetadata:(DBMetadata *)metadata
{
            SAVE_CORE_DATA;
            NSString *folderName = [[self.dateFormatter stringFromDate:[NSDate date]] stringByReplacingOccurrencesOfString:@"/" withString:@"-"];
            NSString *documentsDirectory = DOCUMENTS_DIRECTORY;
            NSString *sourcePath = [NSString stringWithFormat:@"%@/GradeBookPro.sqlite", documentsDirectory];
            NSString *destinationPath = [NSString stringWithFormat:@"/GradeBook Pro/Backup/%@/",folderName];
            [self.restClient uploadFile:@"GradeBookPro.sqlite" toPath:destinationPath withParentRev:[[metadata.contents lastObject]rev] fromPath:sourcePath];               
}
Run Code Online (Sandbox Code Playgroud)

这适用于完美网络连接上相当小的文件或大文件,但上传过程中的任何小错误都会取消整个过程.我想切换到使用分块上传方法,但我不知道如何实际执行.sqlite文件的'分块'.

我似乎无法找到任何使用我可以学习的分块上传的示例应用程序,文档只是说以块的形式提供文件.

所以,我的问题是:

  1. 分块上传是否正确解决用户在可能不稳定的网络连接上上传大文件的问题?

  2. 你能指点一下'分块'文件的示例代码/ app/documentation吗?我对Dropbox SDK非常满意.

谢谢!

objective-c dropbox ios

7
推荐指数
1
解决办法
2931
查看次数

我应该分配一个NSMUtableArray实例变量吗?

这可能是一个愚蠢的问题,但我一直在考虑一段时间没有明显的答案.

我有一个小应用程序,我一直在努力,我的NSMutableArray实例变量有问题.在我向viewDidLoad添加[[NSMutableArray alloc] init]之前,它总是(null).

我对Objective C世界很陌生,所以我试图了解这个问题.我的印象是,我实例化了我的类,实例变量都被分配了.当我在没有alloc/init的情况下向数组添加项时,它保持为(null),保留计数为0.

有问题的数组被声明为(保留)属性.

如果不清楚,我可以添加代码.

iphone objective-c

2
推荐指数
1
解决办法
736
查看次数

UIPickerView - 选择行太快

我目前在我的应用程序中使用UIPIckerView,允许用户从选项列表中进行选择.问题是当用户停止旋转滚轮并且在用户有机会向下滚动列表之前选择一个值时,没有足够的延迟.

有没有办法覆盖轮子停止旋转并且用户移开手指后立即选择行的默认行为?我看到Mobile Safari包含一个很棒的"完成"按钮.

如有必要,我可以提供代码(不确定它会如何帮助).

谢谢!

iphone objective-c

1
推荐指数
1
解决办法
1383
查看次数