我有一堆艺术家存储在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) 来自Apple的核心数据编程指南:
您应该为每个线程提供它自己的完全私有的托管对象上下文,并保持它们的关联对象图在每个线程的基础上分开.
如何扩展到Grand Central Dispatch,你完全无法控制线程,这些线程是代表你自动创建的?
我现在这样做的方法是NSManagedObjectContext为每个调度队列分配一个,但事情就是这样:调度队列不一定每次都使用相同的线程,对吧?
我正在构建一个类似于iPod.app的专辑浏览视图的UITableView:

我是在首次推出时从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显示完全相同的结果.
如何将字符串2010-11-19T20:00:00Z转换为NSDate对象?
我尝试过使用,[dateFormatter setDateFormat:@"yyyy-MM-ddTHH:mm:ssZ"]但看起来我得到了错误的自定义格式样式.
PS:我不关心时区.实际上,我希望日期保留在原始(UTC)时区.
我正在努力建立这个:

白色背景实际上是透明的.我知道如何将CGPath剪辑到一个设置区域,但这似乎是以其他方式,因为我需要从填充的CGPath中减去区域.
我想正确的方法是从CGPath中减去整个外圈,然后在我的CGPoints中绘制较小的圆圈,但我不知道如何执行前者.谁能指出我正确的方向?
我正在尝试使用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中打开.我错过了什么吗?
我正在重新创建某种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没有帮助.还是一无所知......
我有一个带有.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)
我错过了什么,或者只是不可能在谓词中使用获取的属性?
我一直遇到(罕见)NSStrings不返回相同的情况,尽管它们在控制台中打印时看起来完全相同.例如:
[string1 isEqualToString:string2]
> comparing 'angelo debarre' to 'angelo debarre'
Run Code Online (Sandbox Code Playgroud)
不断回归NO.我尝试过使用NSString,stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]但仍然没有运气.我也尝试过使用比较器compare:,localizedCaseInsensitiveCompare:但是我一直得到相同的结果.对我可能会忽略的事情有任何想法吗?
现在只记录以下内容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查询)
iphone ×8
core-data ×3
ruby ×3
cgpath ×1
cocoa-touch ×1
image ×1
imagemagick ×1
logging ×1
nsdate ×1
performance ×1
predicates ×1
rmagick ×1
scroll ×1
sorting ×1
string ×1
tableview ×1
uikit ×1
uitableview ×1