我已经回顾过(和尝试过)一些关于Singletons和NSMutableArrays的线程.我是Objective-C的新手,所以请耐心等待.
我只想创建一些可以从任何视图/ .m文件访问的数组.
Singleton的最佳(或最简洁)编码是什么?
下面是我现在的内容,我在.m'@implementation'得到1个警告 - "不完整的实现"在视图.m文件中使用1个错误 - "初始化元素不是编译时常量"
这是我现在的代码 - 我的GlobalData.h文件:
#import <Foundation/Foundation.h>
@interface GlobalData : NSObject {
NSMutableArray *listOfHeadings;
NSMutableArray *listOfItems1;
NSMutableArray *listOfItems2;
}
@property(nonatomic,retain)NSMutableArray *listOfHeadings;
@property(nonatomic,retain)NSMutableArray *listOfItems1;
@property(nonatomic,retain)NSMutableArray *listOfItems2;
+(GlobalData*)getInstance;
@end
Run Code Online (Sandbox Code Playgroud)
我的GlobalData.m文件:
#import "GlobalData.h"
@implementation GlobalData
@synthesize listOfHeadings;
@synthesize listOfItems1;
@synthesize listOfItems2;
static GlobalData *instance=nil;
+(GlobalData *)getInstance
{
@synchronized(self)
{
if(instance==nil)
{
instance= [GlobalData new];
}
}
return instance;
}
@end
Run Code Online (Sandbox Code Playgroud)
并在视图中.m文件(简化):
#import GlobalData.h
GlobalData *globDat=[GlobalData getInstance]; //error occurs here
Run Code Online (Sandbox Code Playgroud)
有人可以指出麻烦,如果有更好的编码,请赐教 - 谢谢!
编辑
这是我尝试使用的一些链接:
我知道有很多类似的线程,但我已经阅读了所有这些(据我所知)并且没有看到我遇到的同样问题.
我试图将所有文本显示在垂直标签中.
让我解释一下 - 字体并不总是以相同的方式创建,因此它们的总高度可能相同(例如24pts).然而,Ascender和Descender变化很大 - 一种字体可能大部分高于基线,而另一种字体大多数低于基线.因此,具有不同字体的相同文本可能并不总是显示在同一视图/标签中.
例如,请参阅下面的屏幕截图.
第一个是Helvetica-Bold 300pts.第二个是Apple Gothic 300pts.
注意"g"的底部是如何用Helvetica(以及许多其他字体)切断的 - 尝试一下,你会看到.


所以我的问题是:我希望能够看到整个文本,无论字体如何.如果"Helvetica"示例中的文本可以在标签内向上移动(并居中),则可以解决我的问题.为了更容易,我只需要显示一行.
不幸的是,我见过的解决方案都没有涉及字体的下降和上升,并想出如何在Rect中绘制文本而不是裁剪.请注意,各种线程中的"VerticalAlignment"解决方案无法解决此特定问题.
有没有人对此有任何想法或解决方案?
我创建了我认为是使用xCode 5,iOS 7,Storyboards,AutoLayout OFF的基本UICollectionView,但是我得到了奇怪的结果.
我曾希望创建一个单独的"列" - 也就是说,所有单元格垂直堆叠,没有并排(例如TableView):
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
但是,我得到了这样的2列(我只能看到我是否水平滚动):
| 1 | | 2 |
| 3 | | 4 |
| 5 |
我的CollectionView与我的单元格的宽度相同,1个部分,没有插入,没有标题,滚动方向=垂直,布局=流程.
编辑:我尝试通过故事板添加5个单元格,他们按照我的要求排列,但在编程时添加仍然不排队...
EDIT2:FYI,我还有另一个UICollectionView工作正常 - 唯一的区别是它是4x4
如何实现"单列"布局?
我想向用户无法与之交互的 UIToolBar 添加图像。它本质上只是一个非交互式指示器,如徽章。
这可能吗?如果是这样,如何?
我需要一些帮助来理解 MPMediaQuery 以及如何访问结果,以便我可以将查询与 setQueue(with:) 一起使用。
这是我为什么感到困惑的一个例子。
在我的图书馆中,我有一位拥有 3 张专辑的艺术家。我的目标是查询这 3 张专辑,按顺序排列每首曲目:
当我使用此查询时,专辑/歌曲没有按预期顺序排列。即使 shuffle 没有打开,它们也几乎看起来是随机的。
var qryArtists = MPMediaQuery()
qryArtists = MPMediaQuery.artists()
qryArtists.groupingType = MPMediaGrouping.albumArtist
let currLoc = qryArtists.collectionSections![indexPath.section].range.location
myMP.setQueue(with: qryArtists.collections![indexPath.row + currLoc])
for junk in qryArtists.collections![indexPath.row + currLoc].items{
print(" collections title \(junk.albumTitle!) track \(junk.albumTrackNumber) song \(junk.title!)")
}
Run Code Online (Sandbox Code Playgroud)
我得到这些结果:
collections title Cosmic Thing track 8 song Channel Z
collections title …
我是Objective-C的新手,所以我可能会错误地说这个.我已经创建了一个Class"Message",我将它实例化为:
Message *newmsg=[[Message alloc]init];
Run Code Online (Sandbox Code Playgroud)
当我访问我的内容时newmsg(例如):
NSString *junk=((Message *)[globDat.allMsgs objectAtIndex:i]).text
我想交换两个实例的内容.特别是因为班上有多个项目.例如,这个想法是这样的(伪代码)
Message *TopMsg=[[Message alloc]init];
Message *BottomMsg=[[Message alloc]init];
Message *tmpmsg=[[Message alloc]init];
...
//enter values for TopMsg.xyz and BottomMsg.xyz
....
//swap
tmpmsg=TopMsg;
TopMsg=BottomMsg;
BottomMsg=tmpmsg;
Run Code Online (Sandbox Code Playgroud)
编辑:我忽略了在Singleton中使用数组来保存多个Message实例.您可以在示例中看到有关访问内容的信息.
所以只是交换指针给我一个错误:"表达式不可分配"
我试过这个(其中allMsgs是Singleton中的数组):
GlobalData *globDat=[GlobalData getSingleton];
Message *newmsg=[[Message alloc]init];
newmsg=[globDat.allMsgs objectAtIndex:0];
[globDat.allMsgs objectAtIndex:0]=[globDat.allMsgs objectAtIndex:1]; //<--ERROR
Run Code Online (Sandbox Code Playgroud)
还有这个:
GlobalData *globDat=[GlobalData getSingleton];
Message *newmsg=[[Message alloc]init];
newmsg=[globDat.allMsgs objectAtIndex:0];
(Message *)[globDat.allMsgs objectAtIndex:0]=(Message *)[globDat.allMsgs objectAtIndex:1]; //<--ERROR
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我有一个TableView,它已被编码为在使用该didSelectRowAt方法选择的任何单元格时执行操作.
现在,我想向表格(或单元格)添加一个向左滑动手势,这样我可以在滑动单元格时执行辅助操作,而不是轻敲单元格.
1)我希望细胞在滑动时向左移动,但我不想在细胞移动的空间中添加按钮.
2)相反,我希望能够将单元格"拖动"到某个点(比如说中途),然后用indexPath执行辅助操作(所以我知道哪个单元被拖动).
3)如果用户停止拖动或放开单元格,我希望它返回到它的起始位置并且不会发生任何操作.
我已经看过很多样本可以做各种各样的部分但是大多数都在Obj-C中,或者在与单元格相同的行中插入按钮.
另外,将Gesture添加到每个单元格中会更好吗?将它添加到表中似乎更聪明......
编辑:请参阅下面的代码完整答案
我已经在应用程序的几个版本中使用了这个简单的代码,直到iOS 6字符串比较已经有效,但现在它失败了 - 为什么?
if(selectedCell.textLabel.text==@"Font"){
NSLog(@"going to dofontpicker");
[self doFontPicker];
}else if(selectedCell.textLabel.text==@"Color"){
NSLog(@"going to do colorpicker");
[self doColorPicker];
}
Run Code Online (Sandbox Code Playgroud)