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