0

アプリがアクティブになるとALAssetsLibrary、sqlite に保存されている最後の画像を取得NSTimerし、新しい画像が に追加されたことを確認しALAssetsLibraryます。アプリでスクリーンショットを撮った後、sqlite のイメージ名とALAssetsLibrary最後のイメージ名が一致しないため、アラートが表示されます。アプリを閉じると、タイマーを停止し、ユーザーが再度開くと、タイマーを再度開始して、スクリーンショットの画像が削除されているかどうかを確認します。削除されていない場合は、アラートが表示されます

-(void)getAllImagesName
{
    ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];

    NSMutableArray *imgArray = [[NSMutableArray alloc]init];

    [library enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) {

        // Within the group enumeration block, filter to enumerate just photos.
        [group setAssetsFilter:[ALAssetsFilter allPhotos]];

            for (int i=0; i<[group numberOfAssets]; i++) {

                // Chooses the photo at the last index
                [group enumerateAssetsAtIndexes:[NSIndexSet indexSetWithIndex:i] options:0 usingBlock:^(ALAsset *alAsset, NSUInteger index, BOOL *innerStop) {

                    // The end of the enumeration is signaled by asset == nil.
                    if (alAsset) {
//                        ALAssetRepresentation *representation = [alAsset defaultRepresentation];


                        [imgArray addObject:alAsset.defaultRepresentation.filename];


                    }
                }];
            }

            NSString *img;
            img=[[DBModel database]getPreviousName];
            NSLog(@"select img=%@",img);
            NSArray *results;

                NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF contains[cd] %@",img];
                results = [contentArray filteredArrayUsingPredicate:predicate];
                //NSLog(@"predicate results = %@",results);

            if ([results count] != 0) {

                    [self displayAlertMsg];


            }
            else{

            }

        }

    } failureBlock: ^(NSError *error) {
        // Typically you should handle an error more gracefully than this.
        //NSLog(@"No groups");
    }];

}



timer1 = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(getAllImagesName) userInfo:nil repeats:YES];
    runLoop = [NSRunLoop currentRunLoop];
    [runLoop addTimer:timer1 forMode:NSRunLoopCommonModes];
    [runLoop run];

私の問題は、ユーザーが他のアプリでスクリーンショットを撮り、自分のアプリを使用しようとすると、アラートが表示されることです。アプリを閉じた後、タイマーは動作していますか? 私の問題を理解していない人に知らせてください。

4

0 に答える 0