小编sam*_*tte的帖子

去除"前缀"的NSSortDescriptor

我有一堆艺术家存储在CoreData中,并希望按名称对它们进行排序,但忽略前缀"the".因此,例如"甲壳虫乐队"将被归类为"甲壳虫乐队",有点像iTunes/iPod所做的那样.

所以我尝试cleanName在Artist模型中添加一个自定义属性,以便它可以用于排序:

NSSortDescriptor *sortByName = [[NSSortDescriptor alloc] initWithKey:@"cleanName" ascending:YES];
Run Code Online (Sandbox Code Playgroud)

这显然会降低应用程序,因为cleanName它不是SQLEntity的属性:

...keypath cleanName not found in entity <NSSQLEntity Artist id=1>
Run Code Online (Sandbox Code Playgroud)

我知道我可以在商店中保存cleanName,但这对我来说似乎不对.一个新的属性只是将名称剥离了"the"前缀?真?

所以相反,我尝试使用自定义compareObject:toObject:implementation来子类化NSSortDescriptor:

- (NSComparisonResult)compareObject:(Artist*)artist1 toObject:(Artist*)artist2 {

 NSString *cleanString1 = [artist1.name stringByReplacingOccurrencesOfString:@"the " withString:@"" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [artist1.name length])];
 NSString *cleanString2 = [artist2.name stringByReplacingOccurrencesOfString:@"the " withString:@"" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [artist2.name length])];

 return [artist1.cleanName compare:artist2.cleanName options:NSCaseInsensitiveSearch];
}
Run Code Online (Sandbox Code Playgroud)

当我添加一位新艺术家,将"披头士乐队"添加到我的商店时,这就有效.艺术家被分类为"披头士乐队"并显示在我的"B"部分内.但是一旦我退出应用程序并重新启动它,我就会收到以下错误,并且tableview只保持空白:

sectionIndex A for Apparat
sectionIndex B for Bonobo
sectionIndex M for Misteur Valaire
sectionIndex M for Moderat
sectionIndex P for Paul Kalkbrenner
sectionIndex …
Run Code Online (Sandbox Code Playgroud)

sorting iphone core-data tableview

5
推荐指数
1
解决办法
467
查看次数

NSManagedObjectContext和GCD

来自Apple的核心数据编程指南:

您应该为每个线程提供它自己的完全私有的托管对象上下文,并保持它们的关联对象图在每个线程的基础上分开.

如何扩展到Grand Central Dispatch,你完全无法控制线程,这些线程是代表你自动创建的?

我现在这样做的方法是NSManagedObjectContext为每个调度队列分配一个,但事情就是这样:调度队列不一定每次都使用相同的线程,对吧?

iphone multithreading core-data grand-central-dispatch

5
推荐指数
1
解决办法
2078
查看次数

滚动性能和UIImage绘图

我正在构建一个类似于iPod.app的专辑浏览视图的UITableView:

IMG_2316.PNG

我是在首次推出时从iPod库导入所有艺术家和专辑作品.将所有内容保存到CoreData并将其恢复为NSFetchedResultsController.我正在重用单元格标识符,在我的cellForRowAtIndexPath:方法中我有这个代码:

Artist *artist = [fetchedResultsController objectAtIndexPath:indexPath];
NSString *identifier = @"bigCell";

SWArtistViewCell *cell = (SWArtistViewCell*)[tableView dequeueReusableCellWithIdentifier:identifier];

if (cell == nil)
    cell = [[[SWArtistViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier] autorelease];

cell.artistName = artist.artist_name;
cell.artworkImage = [UIImage imageWithData:artist.image];

[cell setNeedsDisplay];

return cell;
Run Code Online (Sandbox Code Playgroud)

我的SWArtistViewCell单元格实现了drawRect:绘制字符串和图像的方法:

[artworkImage drawInRect:CGRectMake(0,1,44,44)]
[artistName drawAtPoint:CGPointMake(54, 13) forWidth:200 withFont:[UIFont boldSystemFontOfSize:20] lineBreakMode:UILineBreakModeClip];
Run Code Online (Sandbox Code Playgroud)

滚动仍然不稳定,我只是无法弄清楚原因.像iPod和Twitter这样的应用程序有黄油平滑滚动,但他们都像我一样在单元格中绘制一些小图像.

我的所有观点都是不透明的.我错过了什么?

编辑:这是Shark所说的:

替代文字

我不熟悉鲨鱼.任何指针与这些符号有什么关系?当我看到这些的痕迹时,它们都指向我的drawRect:方法,特别是UIImage绘图.

替代文字

如果扼杀是文件读取,它会指向别的东西吗?这绝对是绘画吗?

编辑:保留图像

我已经按照pothibo的建议完成了,并将一个artworkImage方法添加到我的Artist类中,该类保留了使用imageWithData创建的图像:

- (UIImage*)artworkImage {
    if(artworkImage == nil)
        artworkImage = [[UIImage imageWithData:self.image] retain];

    return artworkImage;
}
Run Code Online (Sandbox Code Playgroud)

所以现在我可以直接将保留的图像设置为我的TableViewCell,如下所示:

cell.artworkImage = artist.artworkImage;
Run Code Online (Sandbox Code Playgroud)

我还在我的tableViewCell类的setArtworkImage:方法中设置了setNeedsDisplay.滚动仍然是滞后的,Shark显示完全相同的结果.

iphone performance scroll image uitableview

4
推荐指数
1
解决办法
2910
查看次数

DateTime到NSDate

如何将字符串2010-11-19T20:00:00Z转换为NSDate对象?

我尝试过使用,[dateFormatter setDateFormat:@"yyyy-MM-ddTHH:mm:ssZ"]但看起来我得到了错误的自定义格式样式.

PS:我不关心时区.实际上,我希望日期保留在原始(UTC)时区.

ruby iphone ruby-on-rails nsdate

4
推荐指数
1
解决办法
1512
查看次数

CGPath掩盖了CGPoints

我正在努力建立这个: 在此输入图像描述

白色背景实际上是透明的.我知道如何将CGPath剪辑到一个设置区域,但这似乎是以其他方式,因为我需要从填充的CGPath中减去区域.

我想正确的方法是从CGPath中减去整个外圈,然后在我的CGPoints中绘制较小的圆圈,但我不知道如何执行前者.谁能指出我正确的方向?

iphone core-graphics cgpath

4
推荐指数
1
解决办法
932
查看次数

JPG到PNG使用RMagick

我正在尝试使用RMagick将获取的图像从JPG转换为PNG,调整大小然后将其存储在S3上:

thumb = Magick::Image.read("artist.jpg").first
thumb.write("artist.png")
thumb.crop_resized!(120, 120, Magick::CenterGravity)

AWS::S3::S3Object.store("image.png", thumb.to_blob, AWS_BUCKET, :content_type => 'image/png', :access => :public_read)
Run Code Online (Sandbox Code Playgroud)

图像确实保存为png但是当我在预览中打开它时,文档类型仍然显示"JPEG图像".实际上,除非我将扩展名更改回".jpg",否则图像甚至不会在Photoshop中打开.我错过了什么吗?

ruby ruby-on-rails rmagick imagemagick

4
推荐指数
1
解决办法
6279
查看次数

UIWindow的makeKeyAndVisible与ARC不一致

我正在重新创建某种UIAlertView特定于我的应用程序,所以我正在进行子类化UIWindow.窗口被添加到[UIApplication sharedApplication].windows,但实际上从未显示过.我把它修剪成这段小代码:

UIWindow *testWindow = [[UIWindow alloc] initWithFrame:self.view.bounds];
testWindow.backgroundColor = [UIColor blueColor];
[testWindow makeKeyAndVisible];
Run Code Online (Sandbox Code Playgroud)

当我登录时[UIApplication sharedApplication].windows,我看到:

"<UIWindow: 0x83774f0; frame = (0 0; 320 480); opaque = NO; autoresize = RM+BM; layer = <UIWindowLayer: 0x8377660>>",
"<UIWindow: 0x8382630; frame = (0 0; 300 400); layer = <UIWindowLayer: 0xf573e60>>"
Run Code Online (Sandbox Code Playgroud)

然而,现在可以看到具有蓝色背景颜色的第二个窗口.

更新:这似乎只有在启用ARC时才会出现问题.我创建了2个新的"单视图"项目,一个启用了ARC,另一个启用了ARC.两者都是相同的,我将UIWindow代码添加到viewDidAppear:主视图控制器.当我在模拟器中运行应用程序时,蓝色窗口仅显示在禁用ARC的项目中.看起来ARC过快地摆脱了我的UIWindow,所以它甚至没有时间出现.让它__strong没有帮助.还是一无所知......

iphone cocoa-touch uikit

4
推荐指数
1
解决办法
2246
查看次数

在NSFetchedResultsController的谓词中获取属性

我有一个带有.localConcertsfetched属性的Artist对象(基本上是完整.set的子concerts集),我可以在NSFetchedResultsController谓词中使用该属性吗?

这是我正在尝试的:

NSFetchRequest *request = [[NSFetchRequest alloc] init];

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Artist" inManagedObjectContext:context];
[request setEntity:entity];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"localConcerts.@count > 0"];
[request setPredicate:predicate];

fetchedResultsController = [[NSFetchedResultsController alloc]
                            initWithFetchRequest:request
                            managedObjectContext:context
                            sectionNameKeyPath:nil
                            cacheName:nil];
Run Code Online (Sandbox Code Playgroud)

但是我得到了:

'keypath localConcerts not found in entity <NSSQLEntity Artist id=1>'
Run Code Online (Sandbox Code Playgroud)

我错过了什么,或者只是不可能在谓词中使用获取的属性?

iphone core-data predicates

3
推荐指数
1
解决办法
1594
查看次数

来自NSString的isEqualToString的奇怪结果

我一直遇到(罕见)NSStrings不返回相同的情况,尽管它们在控制台中打印时看起来完全相同.例如:

[string1 isEqualToString:string2]
> comparing 'angelo debarre' to 'angelo debarre'
Run Code Online (Sandbox Code Playgroud)

不断回归NO.我尝试过使用NSString,stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]但仍然没有运气.我也尝试过使用比较器compare:,localizedCaseInsensitiveCompare:但是我一直得到相同的结果.对我可能会忽略的事情有任何想法吗?

string iphone

3
推荐指数
1
解决办法
663
查看次数

有delayed_job日志"put",sql查询和作业状态

现在只记录以下内容logs/delayed_job.log:

2012-04-20T03:57:44+0000: Cacher completed after 5.3676
2012-04-20T03:57:44+0000: 1 jobs processed at 0.1744 j/s, 0 failed ...
Run Code Online (Sandbox Code Playgroud)

我正在尝试做的是让它也记录我puts和我的SQL查询,就像在开发模式下一样,除了它仍然被记录log/delayed_job.log.

我尝试添加以下initializers/delayed_job_config.rb但没有运气:

Delayed::Worker.logger = Rails.logger
Delayed::Worker.logger.level = Logger::DEBUG
Run Code Online (Sandbox Code Playgroud)

(我的所有内容puts现在都已记录,但没有更多的作业状态日志,仍然没有SQL查询)

ruby logging ruby-on-rails

3
推荐指数
1
解决办法
3985
查看次数