Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我的iOS应用程序在运行应用程序时会丢失所有动画效果_Ios_Iphone_Xcode_Sqlite_Nsdocumentdirectory - Fatal编程技术网

我的iOS应用程序在运行应用程序时会丢失所有动画效果

我的iOS应用程序在运行应用程序时会丢失所有动画效果,ios,iphone,xcode,sqlite,nsdocumentdirectory,Ios,Iphone,Xcode,Sqlite,Nsdocumentdirectory,我有一个基于navigationController的应用程序,它在documents目录文件夹[NSSearchPathForDirectoriesIndomainsDocumentDirectory,NSUserDomainMask,YES objectAtIndex:0]中存储了许多图像。我还使用sqlite.db在本地存储图像。我的图像存储过程如下: 我的web服务返回imagesurl路径的数组 我将url图像转换为数据,并将转换后的图像数据存储到documents目录文件夹 图像路径

我有一个基于navigationController的应用程序,它在documents目录文件夹[NSSearchPathForDirectoriesIndomainsDocumentDirectory,NSUserDomainMask,YES objectAtIndex:0]中存储了许多图像。我还使用sqlite.db在本地存储图像。我的图像存储过程如下:

我的web服务返回imagesurl路径的数组

我将url图像转换为数据,并将转换后的图像数据存储到documents目录文件夹

图像路径也保存在我的sqlite数据库中

我的问题是,当我将多个图像插入“文档”文件夹时,所有动画效果都会停止或丢失。另一个问题是将图像url保存到数据。数据是一个耗时的过程,我的视图有时会冻结。如何解决这个问题?请通过下面的代码

>


这是一些错误的格式。请正确设置格式以提高可读性。@n00bProgrammer,您能检查我的代码吗?您的帖子中有多个问题。首先,NSData转换非常耗时,应该转移到另一个线程。其次,在大多数情况下,动画问题是由于您试图从主线程以外的线程执行UI更改。请阅读和。我建议您使用异步加载和保存图像。它为你做了大部分工作。您只需要将图像的URL保存在本地存储中,并请求SDWebImage为您获取图像。下载后,它会自动为您缓存图像。非常简单。@n00bProgrammer,谢谢。如何在另一个线程上应用nsdata转换?你能用我上面的代码举例吗?
 //My viewController class
     NSString * documentsDirectoryPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
     NSMutableArray * mMsgArray = [[NSMutableArray alloc]init];
    for (int i=0; i<[imageArray count]; i++) 
   {
        Messages *msg = [[Messages alloc]init];
        NSSting *imgeUrlPath = [[imageArray objectAtIndex:i]objectForKey:@“imgPath”]];
        NSData * data = [NSData dataWithContentsOfURL:[NSURL URLWithString:[[imageArray objectAtIndex:i]objectForKey:@“imgPath”]]];
        msg.msgLocalPath =    [self saveImage:data withFileName:[self getCurrentDateTimeAsNSString] ofType:@"png" inDirectory:documentsDirectoryPath];
        [mMsgArray addObject:msg];
    }
    BOOL msgsuccess = NO;
    msgsuccess = [[DataBaseManager getInstance]saveMessage:mMsgArray];
    if (msgsuccess == NO) {
        UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Message insertion failed" message:nil delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alert show];
    }
 //getting different imageName
-(NSString*)getCurrentDateTimeAsNSString
{
    NSDateFormatter *format = [[NSDateFormatter alloc] init];
    [format setDateFormat:@"yyyyMMddHHmmss"];
    NSDate *now = [NSDate date];
    NSString *retStr = [format stringFromDate:now];
    return retStr;
}
//Saving image to documents path
-(NSString*)saveImage:(NSData *)dataImage withFileName:(NSString *)imageName ofType:(NSString *)extension inDirectory:(NSString *)directoryPath {

    if ([[extension lowercaseString] isEqualToString:@"png"]) {

        NSString *localImgpath = [directoryPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.%@", imageName, @"png"]];
        [dataImage writeToFile:localImgpath atomically:YES];
        return localImgpath;
    } else if ([[extension lowercaseString] isEqualToString:@"jpg"] || [[extension lowercaseString] isEqualToString:@"jpeg"]) {
        [dataImage writeToFile:[directoryPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.%@", imageName, @"jpg"]] options:NSAtomicWrite error:nil];
    } else {
        NSLog(@"Image Save Failed\nExtension: (%@) is not recognized, use (PNG/JPG)", extension);
    }
    return nil;
}
//DataBaseManager Class(Insert message local path to sqlite db)    
-(BOOL)saveMessage:(NSMutableArray*)MsgArray;
{

    BOOL insertSuccess=NO;
    const char *dbpath = [_databasePath UTF8String];//14
    sqlite3_stmt    *mstatement;
    if (sqlite3_open(dbpath, &database) == SQLITE_OK)
    {

        for (int i=0;i<[MsgArray count];i++)
        {

            Messages *Msg = [MsgArray objectAtIndex:i];

            NSString *insertSQL = [NSString stringWithFormat:@"insert into MESSAGES(msg_local_path) VALUES(\"%@\")",Msg.msgLocalPath];
            const char *insert_stmt = [insertSQL UTF8String];

            if (sqlite3_prepare_v2(database, insert_stmt,-1, &mstatement, NULL)!= SQLITE_OK){

                insertSuccess = NO;
            }
            else
            {
                //Add a statement parameter to a query.
                if (sqlite3_step(mstatement) == SQLITE_DONE)

                {
                    NSLog(@"SQLITE_DONE");
                    //  sqlite3_reset(mstatement);
                    insertSuccess = YES;
                }
                else   
                {
                    NSLog(@"SQLITE_FAIL");
                    NSLog(@"Insert failed: %s", sqlite3_errmsg(database));
                    sqlite3_reset(mstatement);
                    insertSuccess = NO;
                }
            }
        }
        sqlite3_close(database);
    }
    else{
        insertSuccess = NO;
    }
    return insertSuccess;
}