gpt4 book ai didi

iphone - 在 NSDocumentDirectory 和 UIScrollView 中删除

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:49:02 25 4
gpt4 key购买 nike

我的代码有问题,能够在 UIScrollView 中使用带图像的缩略图进行预览。我的图像来自 NSDocumentDirectory。虽然我可以从中删除,但是当我从右到左的位置开始时,我可以从中删除(根据 VIEWNSDocumentDirectory)。

问题:现在,无论如何我都可以删除,但是我有几个问题。

  • 首先,虽然我可以删除,但 View 没有排列,我的rearrangeItems: 方法也没有被调用。

  • 其次,然后在第一次加载时我可以随意删除,但就像我说的那样 rearrangeItems: 方法没有被调用,所以他们的名字未重命名

  • 第三,在第一次加载时,无论如何我都可以删除,但是当我退出应用程序时,我可以删除但是我在 NSDocu 中的图像是不删除。

希望有人能帮我解决这个问题。下面是我的代码的预览。

- (void)addImage:(UIImage *)imageToAdd {
[_images addObject:imageToAdd];
[_thumbs addObject:[imageToAdd imageByScalingAndCroppingForSize:CGSizeMake(60, 60)]];

int row = floor(([_thumbs count] - 1) / 5);
int column = (([_thumbs count] - 1) - (row * 5));

UIImage *thumb = [_thumbs objectAtIndex:[_thumbs count]-1];
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button.frame = CGRectMake(column*60+10, row*60+10, 60, 60);
[button setImage:thumb forState:UIControlStateNormal];
[button addTarget:self action:@selector(deleteItem:) forControlEvents:UIControlEventTouchUpInside];
button.tag = [_images count] - 1;
// This is the title of where they were created, so we can see them move.s
[button setTitle:[NSString stringWithFormat:@"%d, %d", row, column] forState:UIControlStateNormal];

[_buttons addObject:button];
[scrollView addSubview:button];
// This will add 10px padding on the bottom as well as the top and left.
[scrollView setContentSize:CGSizeMake(300, row*60+20+60)];
}

- (void) deleteItem:(id)sender {
_clickedButton = (UIButton *)sender;
UIAlertView *saveMessage = [[UIAlertView alloc] initWithTitle:@""
message:@"DELETE?"
delegate:self
cancelButtonTitle:@"NO"
otherButtonTitles:@"YES", nil];
[saveMessage show];

}



- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
NSString *title = [alertView buttonTitleAtIndex:buttonIndex];
if([title isEqualToString:@"YES"]) {
NSLog(@"YES was selected.");
UIButton *button = _clickedButton;
[button removeFromSuperview];

[_buttons removeObjectAtIndex:button.tag];

NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"oneSlotImages%lu.png", button.tag]];
[fileManager removeItemAtPath: fullPath error:NULL];

[self rearrangeItems:button.tag];

}
}


- (void)viewDidAppear:(BOOL)animated
{
[_thumbs removeAllObjects];

for(int i = 0; i <= 100; i++)
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex:0];

NSString *savedImagePath = [documentsDir stringByAppendingPathComponent:[NSString stringWithFormat:@"Images%d.png", i]];
NSLog(@"savedImagePath=%@",savedImagePath);
if([[NSFileManager defaultManager] fileExistsAtPath:savedImagePath]){
[self addImage:[UIImage imageWithContentsOfFile:savedImagePath]];
//NSLog(@"file exists");
}
}
NSLog(@"Count : %d", [_images count]);
}

更新:新的重新排列方法

- (void)rearrangeItems:(int)startIndex {

for (UIButton *button in _buttons) {
// Shift the tags down one
if (button.tag > startIndex) {
NSLog(@"called here");
// Version 2 ****************************
NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"oneSlotImages%lu.png", button.tag]];
NSData *imageData = [NSData dataWithContentsOfFile:fullPath];
[fileManager removeItemAtPath: fullPath error:NULL];
// **************************************

button.tag -= 1;

// Version 2 ****************************
fullPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"oneSlotImages%lu.png", button.tag]];
[imageData writeToFile:fullPath atomically:YES];
// **************************************

// Recalculate Position
int row = floor(button.tag / 5);
int column = (button.tag - (row * 5));
// Move
button.frame = CGRectMake(column*61+8, row*61+8, 60, 60);
if (button.tag == [_buttons count] - 1) {
[scrollView setContentSize:CGSizeMake(300, row*61+16+60)];
}

}
}
}

最佳答案

您显示“rearrangeButtons”但从未使用它 - 我认为上面的代码已过时。无论如何,您在这里遇到了一些小问题:

[_images objectAtIndex:button.tag];
[_images removeObjectAtIndex:button.tag];
[_images removeObject:button];

第一个和最后一个语句没有意义,你应该使用的是:

[_images removeObjectAtIndex:button.tag];
[self rearrangeButtons:button.tag];

要仅向应用程序添加健全性检查,请尝试将此代码添加到 rearrangeButtons 的末尾:

int idx = 0;
for (UIButton *button in _buttons) {
NSLog(@"Going to query button at index %d", idx);
NSLog(@"Button at index %d is of type %@", idx, NSStringFromClass([button class]);
// if the button is not a UIView subclass, it won't have tag. If its a dealloced
// object then it probably will crash when you ask it its class...
if(button.tag != idx) NSLog(@"INDEX PROBLEM AT BUTTON ARRAY INDEC %d", idx);
++idx;
}

编辑:在循环中编辑代码以打印出对象类

EDIT2:所以我把你的代码放到了一个新项目中,ButtonManager .基本上没问题,但你有一些问题。首先,即使不存在文件,您也会对文件名进行索引,因此索引可能会不同步。其次,您对 button.tag 使用 %lu 格式,但这是一个整数,因此您应该使用“%d”。最后,您从数组中删除按钮,但不删除图像或缩略图。

如果您下载该项目,您将在所有需要更改才能正常工作的地方看到警告。我不确定为什么按钮索引被损坏 - 也许是其他代码。在任何情况下,代码中都会添加一个数据一致性测试 - 在代码中散布对它的调用 - 如果它失败了,那么你就知道你的问题是在最后一个好的测试和最近一个失败的测试之间。

该项目在启动时会发出“deleteItem:”消息,只要您点击"is",就会继续删除数组中间的项目。

关于iphone - 在 NSDocumentDirectory 和 UIScrollView 中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12188281/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com