2013-07-25 55 views
0

我试图获得QTMovie的高度和宽度,但无法正确使用。如何获得QTMovie的尺寸

这里的(使用ARC)的代码:

// get the movie's dimensions 
NSSize *sourceSize = (__bridge NSSize *)([[movie movieAttributes] valueForKey:@"QTMovieNaturalSizeAttribute"]); 

NSLog(@"%@", sourceSize); 
// the output seems OK: 
// NSSize: {1920, 1040} 

NSLog(@"%f x %f", sourceSize->width, sourceSize->height); 
// here's the output: 
// 0.000000 x 0.000000 

什么我错在这里做什么?

+0

它只是我,还是'NSSize'实际上不是一个Objective-C类? – 2013-07-25 15:01:41

+0

这是一个结构:http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_DataTypes/Reference/reference.html – Wukerplank

+0

这就是我要说的......等等,得到了解决方案!你知道'valueForKey:'不会返回标量和原始结构吗?它返回Objective-C对象。阅读它的文档 - 如果一个键的值是一个标量或一个结构体,那么它被包装在一个'NSValue'中(或者在数字中是'NSNumber')。因此,'sourceSize-> width'和'sourceSize-> height'不能指向有效的'float',而是指向'NSValue'对象中的任意内存。 – 2013-07-25 15:07:08

回答

0

感谢H2CO3的评论,我得到了这个工作。这是我出错的地方:

[movie movieAttributes]返回一个NSDictionary,而valueForKey是KVC,它不返回非对象值,而是返回wraps them

因此NSSize sourceSize = [[[movie movieAttributes] valueForKey:@"QTMovieNaturalSizeAttribute"] sizeValue]将是检索NSSize结构的正确方法。

另外 - 正如H2CO3的评论所暗示的 - 这是一个愚蠢的错误。入门很难:-)