iPad应用程序在构建期间暂停

时间:2011-08-21 11:03:36

标签: objective-c ios image sqlite freeze

该应用是一款图库应用,可在iOS设备文件系统的Documents文件夹中创建图像。它将图像数据存储到sqlite数据库中。

我正在尝试将iPad应用程序放到设备上,但每次在构建过程中,应用程序只会在Xcode 4的“按线程”面板中显示“已暂停”,并且它会停止构建应用程序。

然而,当我为iPad模拟器构建应用程序时,它运行良好。我在模拟器上看到最终的应用程序并且它没有崩溃。

我的应用程序从txt文件中读取URL列表,从URL构建图像以及该图像的缩略图表示并将其保存到Documents文件夹中。然后它将完整大小的图像的URL存储到sqlite3数据库中。

我已阅读并尝试禁用PNG压缩,就像这个人在这里做的那样:

iOS - Build Freezes When I Build To Device but Not in Simulator

但是这没有解决它,它仍然冻结了构建。

我检查了我的文本文件,它停止读取的行与其他行的结构相同。

有人有这个问题吗?

更新

通过Instruments运行我的应用程序,似乎我有一个CFString不断积累。

我认为这是我的数据库,以及我如何继续向其中插入更多数据。

你们看到这段代码有什么不妥吗?

- (void) insertImageWithImageNumber:(int) imageNumber URL:(NSString *) url ImageDesciption:(NSString *) description andGalleryNumber:(int) galleryNumber
{
    NSString *imageName = [[NSString alloc] initWithString:[url lastPathComponent]];
    NSURL *imageURL = [[NSURL alloc] initWithString:url];
    NSData *imageData = [[NSData alloc] initWithContentsOfURL:imageURL];

    // writing the image file to the Documents folder of this app
    [[NSFileManager defaultManager] createFileAtPath:[MediaDirectory mediaPathForFileName:imageName] contents:imageData attributes:nil];

    NSString *imagePath = [[NSString alloc] initWithString:[MediaDirectory mediaPathForFileName:imageName]];

    //NSLog(@"Image stored in location: %@", imagePath);

    const char *sqlCommand = "INSERT INTO galleryImages (imageNumber, imageURL, imageDescription, galleryNumber) VALUES (?, ?, ?, ?);";

    sqlite3_stmt *statement;

    sqlite3_prepare_v2(database, sqlCommand, -1, &statement, nil);
    sqlite3_bind_int(statement, 1, imageNumber);
    sqlite3_bind_text(statement, 2, [imagePath UTF8String], -1, SQLITE_TRANSIENT);
    sqlite3_bind_text(statement, 3, [description UTF8String], -1, SQLITE_TRANSIENT);
    sqlite3_bind_int(statement, 4, galleryNumber);

    sqlite3_step(statement);
    sqlite3_finalize(statement);

    UIImage *thumbnailImage = [[UIImage alloc] initWithData:imageData];

    // creating thubmanil of the full size image and storing them
    UIGraphicsBeginImageContext(CGSizeMake(thumbnailImage.size.width / 4.0, thumbnailImage.size.height / 4.0));

    // redraw the image in a smaller size (resizing the image)
    [thumbnailImage drawInRect:CGRectMake(0, 0, thumbnailImage.size.width / 4.0, thumbnailImage.size.height / 4.0)];

    // making a new thumbnail image from current context
    UIImage *newThumbnailImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    // getting the binary data for the thumbnail image so we can write it to disk later
    NSData *thumbnailData = UIImagePNGRepresentation(newThumbnailImage);

    // write the thumbnail image to disk
    NSString *thumbnailName = [[NSString alloc] initWithFormat:@"%@_thumb.%@", [imageName stringByDeletingPathExtension], [imageName pathExtension]];

    //NSLog(@"Thumbnail path = %@", [MediaDirectory mediaPathForFileName:thumbnailName]);

    [thumbnailData writeToFile:[MediaDirectory mediaPathForFileName:thumbnailName] atomically:NO];

    [thumbnailImage release];
    [thumbnailName release];
    [imagePath release];
    [imageData release];
    [imageURL release];
    [imageName release];
}

更新更新

我决定重新编写程序设计并在创建将所有图像插入数据库后动态创建缩略图。因此,在插入图像数据的循环之后,我有另一个循环来构建缩略图图像并将其添加到界面。

我想重新设计我的设计是一种解决方案:)

0 个答案:

没有答案