在 macOS 10.12 中,NSURLCanonicalPathKey被添加到NSURL. 文档指出:
\n\n\nURL 的路径作为规范的绝对文件系统路径。
\n
除此之外,我看到的唯一其他文档/信息来自Swift 论坛帖子,其中指出:
\n\n\n\n\n您可能想查看 .canonicalPathKey (NSURLCanonicalPathKey)。在 Apple 平台上,许多标准 UNIXy 路径都存在于 /private/ 中,并具有来自根目录的相应符号链接。所以/etc/实际上是/private/etc/。如果您不\xe2\x80\x99t 规范化路径,您可能会因此而陷入困境。
\n
这对我来说似乎是一件大事,但令我惊讶的是它只在 10.12 中引入。我曾经只依赖NSURLPathKey或.path书签数据来解析 URL,但从来没有遇到过问题。
我现在应该在以前使用过的所有地方都使用规范路径\n标准路径值吗?
如果我将路径信息作为字符串存储在数据库中,我应该存储.pathor的值吗NSURLCanonicalPathKey?
如果我将 转换NSURL为字符串表示形式以在需要文件路径的 C/C++ 库中使用,我应该使用规范路径表示形式吗?
如果您要向用户显示文件的路径,是否应该显示规范路径?
与和NSURLCanonicalPathKey相比如何,它们似乎做了相同的事情或相反的事情......(?)URLByStandardizingPathURLByResolvingSymlinksInPath
这是在 macOS 10.14 上,我只考虑指向文件或文件夹的 URL。我知道书签数据可能应该存储在数据库中而不是路径中。
\n由于Core Foundation中没有NSValue的副本,我们如何在CFMutableDictionary中存储C结构?
我对于通过self访问实例变量或仅通过名称(在类中工作时)之间的区别感到困惑.
例如,参加这个课程:
//In .h file:
@interface Register : NSObject {
NSString *mName;
}
- (id) initWithName:(NSString *) name;
//In .m file:
- (id) initWithName:(NSString *)name
{
if (self == [super init])
{
mName = name;
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
通过访问实例变量之间的区别是什么
self.mName = name;
Run Code Online (Sandbox Code Playgroud)
VS
mName = name;
Run Code Online (Sandbox Code Playgroud)
哪个不是@property而且不是@ sythenize'd.
说这是这个,但是这个例子:
//In .h file:
@interface Manange_My_ViewsViewController : UIViewController {
IBOutlet UILabel *countLabel;
}
@property (nonatomic, retain) IBOutlet UILabel *countLabel;
//In .m file:
@synthesize countLabel;
- (void) updateLabel:(NSUInteger)count
{
countLabel.text = [NSString …Run Code Online (Sandbox Code Playgroud) 我正在使用SBJsonParser来解析JSON.输入可以是0或字符串(例如a829d901093),如果它为零,则返回NSCFBoolean,如果返回其字符串NSCFString.我怎么知道哪一个被退回?谢谢!
是否可以在NSDictionary中添加NSDate作为键和一些数组?
我没有任何要求将字典写入磁盘 - 归档或取消归档,就像这个人需要它一样:NSDictionary使用NSDates作为密钥
但是,为什么我希望将NSDate作为键特别添加,以便我可以从字典中获取所有键并进行一些计算,例如从一个范围内获取日期.
具有相同日期值的两个对象在创建时是否共享相同的内存?
是否可以将NSDate作为关键?此外,我可能会面临这个假设的其他问题?
谢谢,
拉吉
编辑: 发布我的问题后,我刚刚写了一个示例代码:
NSDateComponents *dateComps = [[NSDateComponents alloc] init];
[dateComps setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
[dateComps setDay:1];
[dateComps setMonth:1];
[dateComps setYear:2012];
NSDate *date1 = [[NSCalendar currentCalendar] dateFromComponents:dateComps];
NSDate *date2 = [[NSCalendar currentCalendar] dateFromComponents:dateComps];
NSLog(@"Date 1 = %x, Date 2 = %x", date1, date2);
Run Code Online (Sandbox Code Playgroud)
输出:
Date 1 = 7945610, Date 2 = bd03610
Run Code Online (Sandbox Code Playgroud)
但是,NSDictionary的关键比较是否将这两个NSDate对象解释为不同?
另一个编辑:
另外,如果我应该使用NSDateFormatter将NSDate转换为NSString,我无法直接检查范围内的日期.我将不得不执行以下步骤:
那么,还有更好的方法吗?
我有一个应用程序,可以将各种过滤器应用于图像.它在iOS 5上运行良好但在6上崩溃.下面是它崩溃的地方示例:
CGImageRef inImage = self.CGImage;
CFDataRef m_DataRef = CGDataProviderCopyData(CGImageGetDataProvider(inImage));
UInt8 * m_PixelBuf = (UInt8 *) CFDataGetBytePtr(m_DataRef);
int length = CFDataGetLength(m_DataRef);
for (int i=0; i<length; i+=4)
{
if(filter == filterCurve){
int r = i;
int g = i+1;
int b = i+2;
int red = m_PixelBuf[r];
int green = m_PixelBuf[g];
int blue = m_PixelBuf[b];
m_PixelBuf[r] = SAFECOLOR(red); // <==== EXC_BAD_ACCESS (code = 2)
m_PixelBuf[g] = SAFECOLOR(green);
m_PixelBuf[b] = SAFECOLOR(blue);
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试将值重新分配给时,请注意错误的访问点m_PixelBuf.任何人都知道为什么会这样?iOS 6中的内容会导致什么?
我想通过将文本转储到文件来调试我的应用程序中的一些东西,如下所示:
FILE *file;
file = fopen("/tmp/file.txt","a+");
fprintf(file,"%s\n", "silly debug message");
fclose(file);
Run Code Online (Sandbox Code Playgroud)
当我将文件作为./myapplication运行时,这是有效的.但是,当我将其捆绑为应用程序包(使用gtk-osx-application和gtk-mac-bundler)并运行应用程序包时,不会创建该文件.它无声地失败并继续执行.
有什么想法吗?是否有沙盒正在进行?
感谢Ken,现在正在努力.我甚至认为我理解为什么:-)
这是修改后的行:
- (void) reCreatePath {
CGMutablePathRef p = ::CGPathCreateMutable() ;
::CGPathMoveToPoint (p, 0, TL.x, TL.y) ;
// [snip]
::CGPathAddLineToPoint (p, 0, BL.x, BL.y) ;
::CGPathCloseSubpath(p) ;
self.path = p ;
::CGPathRelease(p) ; // <<== THIS IS IT!! :-)
}
Run Code Online (Sandbox Code Playgroud)
我还是不明白.我试过Chuck的建议:
@property (nonatomic, strong) __attribute__((NSObject)) CGPathRef path ;
Run Code Online (Sandbox Code Playgroud)
像这样:
@interface TopLeftSlidingView ()
@property (nonatomic, strong) __attribute__((NSObject)) CGPathRef path ;
@end
Run Code Online (Sandbox Code Playgroud)
在我重新创建CGPath的时候:
- (void) reCreatePath {
CGMutablePathRef p = ::CGPathCreateMutable() ;
::CGPathMoveToPoint (p, 0, TL.x, TL.y) ; …Run Code Online (Sandbox Code Playgroud) 我不确定是否使用CF_RETURNS_RETAINED或CF_RETURNS_NOT_RETAINED为我的自定义函数返回a CFDataProviderRef.
根据定义宏的位置的文档,两者都应该只在特殊情况下使用,并且正确的修复应该是修复我的命名约定.然而,swift/objective-c文档建议使用它们来注释返回CoreFoundation指针的任何函数,而不是真正解释何时使用哪个 - 如果我不注释它们,我需要每次在swift代码中手动指定行为.
我能找到的进一步文档解释了如何使用+1值的+1值和0的另一个值,但是我担心这对我的理解没有多大帮助.
我的问题:
Base.h建议改进我的命名?CFDataProviderRef我通过呼叫获得的CGDataProviderCreateSequential.我猜这意味着我希望行为为CGDataProviderCreateSequential(对吧?).如何找到该函数是否使用CF_RETURNS_RETAINED或CF_RETURNS_NOT_RETAINED(CGDataProvider.h文件中是否存在)?根据文档 CFDictionaryCreate用于实例化CFDictionary swift.
func CFDictionaryCreate(_ allocator: CFAllocator!,
_ keys: UnsafeMutablePointer<UnsafePointer<Void>>,
_ values: UnsafeMutablePointer<UnsafePointer<Void>>,
_ numValues: CFIndex,
_ keyCallBacks: UnsafePointer<CFDictionaryKeyCallBacks>,
_ valueCallBacks: UnsafePointer<CFDictionaryValueCallBacks>) -> CFDictionary!
Run Code Online (Sandbox Code Playgroud)
我怎样才能创建keys和values参数?到目前为止,我已尝试使用swift的String类型,希望它会自动转换为适当的类型:
import Foundation
var keys : [String] = ["key1", "key2"]
var values : [String] = ["value1", "value2"]
var keyCallbacks = kCFTypeDictionaryKeyCallBacks
var valueCallbacks = kCFTypeDictionaryValueCallBacks
var dict : CFDictionary = CFDictionaryCreate(kCFAllocatorDefault,
&keys, &values, 2, &keyCallbacks, &valueCallbacks)
Run Code Online (Sandbox Code Playgroud)
不幸的是我收到一个错误,说String不是keys和values数组元素的正确类型:
main.swift:41:2: error: 'String' is …Run Code Online (Sandbox Code Playgroud) core-foundation ×10
objective-c ×5
macos ×4
cocoa ×3
iphone ×2
swift ×2
appkit ×1
c ×1
cfdata ×1
cfdictionary ×1
cfstring ×1
cocoa-touch ×1
file-io ×1
ios ×1
ios6 ×1
nsdate ×1
nsdictionary ×1
oop ×1
self ×1
url ×1